中石油训练赛 - 姓氏(思维+水题)
題目描述
在一個(gè)很大的課室里,里面有很多學(xué)生在聽(tīng)課。L老師挑選了其中的N個(gè)不同的學(xué)生起立回答問(wèn)題,L老師對(duì)起立的每一個(gè)學(xué)生都是問(wèn)同樣的問(wèn)題:“在本課室里,和你同姓的學(xué)生有多少人(不包括你自己)?”。這N個(gè)起立的同學(xué)的回答如下:
第1位起立的同學(xué)回答:和我同姓的,除了我之外,本課室里還有A[1]個(gè)學(xué)生。
第2位起立的同學(xué)回答:和我同姓的,除了我之外,本課室里還有A[2]個(gè)學(xué)生。
第3位起立的同學(xué)回答:和我同姓的,除了我之外,本課室里還有A[3]個(gè)學(xué)生。
。。。。。。
第N位起立的同學(xué)回答:和我同姓的,除了我之外,本課室里還有A[N]個(gè)同學(xué)。
假設(shè)這N位同學(xué)的回答都是正確的,那么課室里至少有多少個(gè)學(xué)生?
輸入
第一行,一個(gè)整數(shù)N。
第二行,N個(gè)整數(shù),空格分開(kāi),第i個(gè)整數(shù)表示A[i]。
輸出
一個(gè)整數(shù),表示課室里至少有多少個(gè)學(xué)生。
樣例輸入
4 1 2 1 2樣例輸出
5提示
根據(jù)4位學(xué)生的回答,可以推斷出課室不可能少于5個(gè)學(xué)生,所以輸出5。
對(duì)于20%的數(shù)據(jù), N = 2,0<=A[i]<=10。
對(duì)于另外20%的數(shù)據(jù), N = 3, 0<=A[i]<=100。
對(duì)于100%的數(shù)據(jù),3<N<=50,0<=A[i]<=1000000。
題目大意:給出n個(gè)條件,說(shuō)明除自己之外有a[i]個(gè)人的姓氏和自己相同,問(wèn)全班最少有多少個(gè)人
題目分析:首先我們要簡(jiǎn)單轉(zhuǎn)換一下,出自己之外有a[i]個(gè)人的姓氏和自己相同,也就是全班一共有a[i]+1個(gè)人有當(dāng)前第i個(gè)人的姓氏,一開(kāi)始我是想直接用set去重然后記錄一下有多少個(gè)不同的數(shù)字的,然后累加一下,但是WA掉了,去找xy大佬要了一個(gè)數(shù)據(jù),直接把我hack掉了,那就是
4
2 2 2 2
正確答案應(yīng)該是6,而我的程序給出的答案是4,現(xiàn)在我意識(shí)到了這個(gè)題目還和a[i]+1的數(shù)量有關(guān)系,如果a[i]+1的數(shù)量大于a[i]+1的話,那么用一個(gè)姓氏就不夠了,所以我們還需要用map儲(chǔ)存一下有多少個(gè)a[i]+1,最后處理的時(shí)候稍微注意一下這個(gè)細(xì)節(jié)就好了
一開(kāi)始沒(méi)做這個(gè)題是因?yàn)榇_實(shí)沒(méi)看懂題。。第一反應(yīng)還以為是福爾摩斯找犯人的那種邏輯模擬題,結(jié)果發(fā)現(xiàn)就是個(gè)簡(jiǎn)單思維題
代碼:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;int main() { // freopen("input.txt","r",stdin); // ios::sync_with_stdio(false);int n;cin>>n;map<int,int>mp;for(int i=1;i<=n;i++){int num;scanf("%d",&num);num++;mp[num]++;}int sum=0;for(auto it:mp){sum+=it.first;while(mp[it.first]>it.first){mp[it.first]-=it.first;sum+=it.first;}}if(sum>=n)printf("%d\n",sum);elseprintf("%d\n",n);return 0; }?
總結(jié)
以上是生活随笔為你收集整理的中石油训练赛 - 姓氏(思维+水题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中石油训练赛 - 手机号码(简单分块+思
- 下一篇: 中石油训练赛 - 位置(模拟+思维)