[ 题解 ] A. The Bucket List (待更名)
http://codeforces.com/group/NVaJtLaLjS/contest/238166/problem/A
输入N表示N只牛要挤奶(1≤N≤100),接下来有N行;
分别表示开始、结束时间(1~1000),以及需要多少桶(1~10)。
问:最多要准备多少桶?
示例:
Input:
3 4 10 1 8 13 3 2 6 2
Output:
4
因为时间范围只有1000,这里只需要维护一个数组buckets[1001]就行。
下标表示时间,值表示这个时间点需要多少个桶。
buckets[1001]={0}; //初始化为0
对于第一个数据4,10,1,表示在第4至10分钟占用了1个桶,
那么从buckets[4]到buckets[10],每个都要+1;
8,13,3,第8到13分钟占用3个桶,
buckets[8]到buckets[13],+3;
第三数据同理。
这时数组打印出来是这样:
i 1 2 3 4 5 6 7 8 9 10 11 12 13 B[i] 0 2 2 3 3 3 1 4 4 4 3 3 3
最终得到全部时间中各时间点需要的桶的数量,取其中最大值即可。
被注释的两行是中途废弃的数组,这题其实没有什么复杂的,直接100+1000次暴力循环,不需要记一堆区间去求桶数
1 #include <stdio.h> 2 3 int N; 4 //int cows[102][3]={0}; 5 int s,f,b; 6 int max=0; 7 int buckets[1002]={0}; 8 int main() 9 { 10 scanf("%d",&N); 11 for(int n=1;n<=N;n++) 12 { 13 // scanf("%d%d%d",&cows[n][0],&cows[n][1],&cows[n][2]); 14 scanf("%d%d%d",&s,&f,&b); 15 for(int i=s;i<=f;i++) 16 { 17 buckets[i]+=b; 18 } 19 } 20 for(int i=1;i<=1000;i++) 21 { 22 if( buckets[i]>max )max=buckets[i]; 23 } 24 printf("%d\n",max); 25 /* 26 printf("i\t"); 27 for(int i=1;i<=13;i++) 28 printf("%d\t",i); 29 puts(""); 30 printf("B[i]\t"); 31 for(int i=1;i<=13;i++) 32 printf("%d\t",buckets[i]); 33 puts(""); 34 */ 35 return 0; 36 }