代码写的有点丑…………
这道题还比较有趣,思路重点就是:
1.相同的合并直至达到对应人数。
2.不相同的独立对应一个人数。
3.相同的超出对应人数,则新对应一个人数。
#include
#include
#include
#include
using namespace std;
int main()
{
vector input;
int tmp;
while(cin>>tmp)
{
input.push_back(tmp);
if(cin.get()=='\n')
break;
}
int n=input.size();
int j;
//辅助数组
vector > aux(n);
vector::iterator it;
//aux[0].first=input[0]+1;
//aux[0].second=1;
for(int i=0;i
{
//不相同
if((it=find(input.begin(),input.begin()+i,input[i]))==(input.begin()+i))
{
aux[i].first=input[i]+1;
aux[i].second=1;
}
//相同
else{
j=it-input.begin();
//相同的要找:最近的
while((it=find(it+1,input.begin()+i,input[i]))!=(input.begin()+i))
{
if(aux[it-input.begin()].first==input[i]+1)
j=it-input.begin();
}
//人数未满
if(aux[j].second
{
aux[j].second+=1;
}
//人数已满
else{
aux[i].first=input[i]+1;
aux[i].second=1;
}
}
}
int num=0;
vector >::iterator it1=aux.begin();
for(;it1
{
if(it1->first!=0)
num+=it1->first;
}
cout<
}