`
Simone_chou
  • 浏览: 184666 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

分配数字(区间统计)

 
阅读更多

分配数字 

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)

Total Submission(s) : 6   Accepted Submission(s) : 2

Font: Times New Roman | Verdana | Georgia 

Font Size: ← →

Problem Description

  Mandy和GG玩游戏。。。

  一开始,n个桶放在一条直线上,下标分别为 1,2,3….n,然后Mandy执行m个操作,每次选择一个区别[L,R],向下标在这个范围内的桶放入一个石头。同时,Mandy还有n个数。

  Mandy让GG把这n个数分别和这些桶对应(一个数对应一个桶,一个桶对应一个数),将这些数分配后,每个数的分数为 ((桶内的石头数)乘于 (和该桶对应的数)),Mandy让GG求出分数的最大值,如果GG的值是对的,那么GG就赢了,否则,Mandy就赢了。但是GG对这个没什么把握,于是请求你的帮忙。(注意,游戏开始前,所有的桶都不包含石头)

   

Input

第一行包含一个T (1 <= T <= 10),表示有T组数据。

  对每一组测试数据,第一行有两个整型数据n (1 <= n <= 10000,0 <= m <= 1000),代表桶的个数以及Mandy要进行的操作数。

  接下来n行,每一行包含一个数ai (1<= i <= n,0 <= ai <= 1000),表示要分配给每个桶的数

  接下来有m行,每行包含两个数L,R,表示Mandy在下标在[L,R]范围内的桶放入一个石头。

 

Output

  对于每组测试数据,输出一个值表示分配ai(1 <= i <= n)后可以得到的最大分数。

 

Sample Input

2

3 0

8

1

5

5 2

1

2

3

4

5

1 2

2 3

 

Sample Output

 

0

17

 

Author

 

XxX_Stu 

   题意:

   有N个桶,M个操作。操作是指在[ A , B ]之间放石头,一共有进行M次。还有N个数字(没有说哪个数字一定对应哪个,N个数字是随机获得的),分配数字使 每个桶的石头数 X 所分配的数字 之和达到最大值。

   思路:

   这题与USACO的题有点类似,有M个操作固有M个区间,每输入一次区间就a[from]++,a[to+1]--,最后后一项+=前一项。则可统计出每个桶的石头数;最后对桶中石头数排序,对分配的数字排序,放在两个数组中,最后对应相乘再相加即可求出答案。

   

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;

int cmp(int U,int I)
{
  return U>I;
}
__int64 a[500000];
__int64 b[100000];
__int64 sum;

int main()
{
   int T;
   scanf("%d",&T);
   while(T--)
   {    
   	sum=0;
        int n,m;   	   	
   	scanf("%d %d",&n,&m);	            
        memset(b,0,sizeof(b));            /*初始化*/
       	for(int i=1;i<=n;i++)
   	  scanf("%I64d",&a[i]);           /*分配数字*/
        int t=m;    	
       	while(t--)
        {
          int L,R;
          scanf("%d %d",&L,&R);
          b[L]++;                         //分石头;
          b[R+1]--;
        }
        for(int i=2;i<=n;i++)
            b[i]+=b[i-1];
        sort(a+1,a+1+n,cmp);	          /*数字排序*/  
        sort(b+1,b+1+n,cmp);              /*石头排序*/
   	for(int i=1;i<=n;i++)
   	   sum+=(__int64)b[i]*a[i];       /*求和*/
   	 printf("%I64d\n",sum);           /*输出*/
   }
 return 0;
}

    与USACO的Milking Cows对比。

 

分享到:
评论

相关推荐

    poj.grids.cn题型分类

    统计单词个数问题 棋盘分割 日程安排问题 最小逼近问题(求出两数之比最接近某数/两数之和等于某数等等) 方块消除游戏(某区间可以连续消去求最大效益) 资源分配问题 数字三角形问题 漂亮的打印

    商品进销存管理系统(数据库课程设计报告).doc

    1.2 划分子系统 各个模块的划分 1.3 制定信息系统开发方案及日程安排 1.3.1 任务分配 陈 光:商品入库(输入) 李钦铭:信息查询(查询) 冶福磊:信息修改(修改) 钟浩杰:信息统计(统计) 曾 炫:商品销售...

    管理信息系统概论3.doc

    9区间码把数据项分成若干组,每一区间代表一个组,码中数字的值和位置都代表一定的 意义 10.供应链:相互间通过提供原材料、零件和产品等的厂家、供应商等组成的网络,包括 外购、制造、分销、库存管理、运输、仓储...

    ORACLE9i_优化设计与系统调整

    §1.3 数据块、区间和段 28 §1.3.1 数据块(data block) 28 §1.3.2 区间(extent) 28 §1.3.3 段(segment) 28 §1.4 SQL语句处理 29 §1.4.1 SQL语句处理顺序 29 §1.4.2 COMMIT语句处理顺序 32 §1.5 共享池 33...

    P2P视频技术源码(VC)

    IDLE时间比较长, 此外, 一般还需要定期报告系统统计数字, 因此需要及时性. 为此, 一般periodLog或者periodCheck都判断是执行这两者中的哪一种操作. 4) 查询CPPeer时, 考虑到目前只支持GCP, 因此直接采用了GCPCHOICE,...

    P2P视频播放器 详细制作实例

    IDLE时间比较长, 此外, 一般还需要定期报告系统统计数字, 因此需要及时性. 为此, 一般periodLog或者periodCheck都判断是执行这两者中的哪一种操作. 4) 查询CPPeer时, 考虑到目前只支持GCP, 因此直接采用了GCPCHOICE...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例090 统计图书的销售量 111 实例091 汉诺塔问题求解 112 实例092 不能重写的方法 113 5.3 包装类的使用 114 实例093 将字符串转换成整数 114 实例094 整数进制转换器 115 实例095 查看数字的取值范围 116 实例096...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    6.4.3 配置文件的创建和分配 189 6.5 数据库安全和最小权限原则 192 6.5.1 PUBLIC权限 192 6.5.2 对安全性至关重要的实例参数 193 6.6 使用标准数据库审核 197 6.6.1 审核SYSDBA活动 198 6.6.2 数据库审核 ...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    6.4.3 配置文件的创建和分配 189 6.5 数据库安全和最小权限原则 192 6.5.1 PUBLIC权限 192 6.5.2 对安全性至关重要的实例参数 193 6.6 使用标准数据库审核 197 6.6.1 审核SYSDBA活动 198 6.6.2 数据库审核 ...

Global site tag (gtag.js) - Google Analytics