Atcoder Beginner 065 – C 解题报告

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);

      }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值