您的位置:首页 > 其它

Atcoder Beginner 065 – C 解题报告

2018-03-27 12:35 351 查看
1.题意:在几个分数段,分别有不同的气球颜色,而 >=3200 这个区间,可以选择任意颜色,问最多和最少呈现的颜色。2.思路:首先开一个res数组,根据输入分数的区间,对res数组赋值,模拟气球颜色。接着把 >=3200 的这段特殊区间隔离开,开一个flag标记数组,令cnt = 0计数,找过的区间段用flag标记,不再进行颜色个数cnt的累加,这样得到的cnt是,除去 >=3200 这段区间的分数外,气球颜色的计数。接着对>= 3200的分数计数,如果所有分数都>=3200,那最大值就是分数数组元素个数,最小值就是1,否则,最大值就是刚才的cnt加上>=3200元素个数,最小值就是cnt。3.代码:#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>using namespace std;int n;int minx, maxx;int a[122];int res[122];bool flg[122]; int main() {      while(~scanf("%d",&n)) {            memset(flg, 0,sizeof(flg));            memset(a, 0, sizeof(a));            memset(res, 0,sizeof(res));            int cnt = 0;            for(int i = 1; i <= n;i++) scanf("%d", &a[i]);            for(int i = 1; i <= n;i++) {                  if(a[i] >= 1&& a[i] <= 399) res[i] = 1;                  else if(a[i] >=400 && a[i] <= 799) res[i] = 2;                  else if(a[i] >=800 && a[i] <= 1199) res[i] = 3;                  else if(a[i] >=1200 && a[i] <= 1599) res[i] = 4;                  else if(a[i] >=1600 && a[i] <= 1999) res[i] = 5;                  else if(a[i] >=2000 && a[i] <= 2399) res[i] = 6;                  else if(a[i] >=2400 && a[i] <= 2799) res[i] = 7;                  else if(a[i] >=2800 && a[i] <= 3199) res[i] = 8;                  else res[i] = 9;            }            for(int i = 1; i <= n;i++) {                  if(res[i] != 9&& flg[res[i]] == 0) {                       flg[res[i]] =1;                        cnt++;                  }            }            int c = 0;            for(int i = 1; i <= n;i++) {                  if(res[i] == 9) c++;            }            if(c == n) minx = 1;            else minx = cnt;            int t = 0;            for(int i = 1; i <= n;i++){                  if(res[i] == 9) t++;            }            maxx = cnt + t;            printf("%d%d\n", minx, maxx);      }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Atcoder水题