糖果谜题

糖果谜题_牛客网

https://www.nowcoder.com/practice/8ff3e3a14ea04c6bb3a60e2e457dafb1?tpId=98&tqId=32894&tPage=2&rp=2&ru=/ta/2019test&qru=/ta/2019test/question-ranking

思想就是用map记录每个相同数字num的次数count;
1、count<=num+1,则该num对应的人数为num+1;
2、count>num,则进行num+1,count -= num;之后再进行判断,因为每一个num对应的人数最多为num+1,所以要减去num重新判断。
即比如2 2 2 2;这四个2是不同阵容的,比如前面两个2代表蓝色,则后面的两个2就应该是红色或者其他不适蓝色的颜色。属于两个阵容,人数为(3+1) + (3+1);

#include <iostream>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
    map<int, int>mp;
    int num;
    while(cin>>num) {
        if(mp.find(num) == mp.end()) {//没有则建立字典
            mp.insert(make_pair(num, 1));
        }
        else
            mp.find(num)->second += 1;
    }
    int res = 0;
    for(map<int,int>::iterator i=mp.begin(); i!=mp.end(); ) {
        if(i->first == 0) {//0代表均不同,则键对应的值就是人数
            res += i->second;
            ++i;
        }
        else {//每个键对应的人数最多为key+1,所以需要判断。
            res += i->first+1;
            if(i->second <= i->first+1) ++i;
            else i->second -= i->first;
        }
    }
    cout<< res << endl;
}
全部评论

相关推荐

野猪不是猪🐗:蓝桥杯省三去了,你把省三写上去就等于告诉人家你连前30%都没进,纯负面作用; 天池新闻感觉比较入门级了,有对口实习了感觉这个就可以去掉了,第一个项目可以展开写写补上空位
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:春节刚过就开卷吗?哈基馆,你这家伙......
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务