题目链接:http://codeforces.com/problemset/problem/357/A
题目意思:将一堆人分成两组:beginners 和 intermediate coders 。每一个人都有一个point,给出每一个point里的总人数(Ci 个人有分数 i )和 x,y,需要找出划分为两组后,每一个组的人数(假设为a,b)符合 x <= a <= y 并且 x<= b <= y 的条件,输出这a个人是小于哪个point的,这个point还应该满足另一组的b个人都不小于它。当不能找到这个point符合条件时,输出0.
直接模拟即可。不断累加读入的人数,当这个人数 >= x时,就验证(总人数 - 这个从前往后依次累加的人数)是否也满足 <= y这个条件,一旦发现满足,就得到答案了,此时输出对应累加的人数中最后一个人所拥有的point。这里用到结构体来处理。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 using namespace std; 5 6 const int maxn = 1e4 + 10; 7 8 struct students 9 { 10 int num; // 每一个分数所对应的人数 11 int point; 12 } exa[maxn]; 13 14 int main() 15 { 16 int x, y, m, i, flag, sum1, sum2, sum; 17 while (scanf("%d", &m) != EOF) 18 { 19 sum = 0; 20 for (i = 1; i <= m; i++) 21 { 22 scanf("%d", &exa[i].num); 23 sum += exa[i].num; 24 exa[i].point = i; 25 } 26 scanf("%d%d", &x, &y); 27 sum1 = 0; 28 flag = 0; 29 for (i = 1; i <= m; i++) 30 { 31 sum1 += exa[i].num; // 划分后第一个组的人数 32 sum2 = sum - sum1; // 划分后第二个组的人数 33 if ((sum1 >= x && sum1 <= y) && (sum2 >= x && sum2 <= y)) 34 { 35 flag = 1; // 找到一个解的标志 36 break; 37 } 38 } 39 if (flag) 40 printf("%d\n", exa[i+1].point); 41 else 42 printf("0\n"); 43 } 44 return 0; 45 }