这个题目很简单 用2^i进位就好了 但是让卡住了 原因是得用输入挂 。。。。。学习了一波
#include <iostream>
#include <algorithm>
using namespace std;
int arr[1002000];
template <class T>
inline void scan_d(T &ret)
{
char c;
ret=0;
while((c = getchar()) < '0' || c > '9');
while(c >= '0' && c <= '9')
{
ret = ret * 10 + (c - '0'), c = getchar();
}
}
int main()
{
int n;
cin>>n;
while(n--)
{
int buff;
scan_d(buff);
arr[buff]++;
}
int startpoint;
for(int i=0;i<=1e6+1000;++i)//1e6后面一定要加足够的数量保证进位能够成功!刚开始我就写了1e6+5结果不够 有两个wa点
{
int buff=arr[i]/2;
arr[i]%=2;
arr[i+1]+=buff;
if(arr[i]) startpoint=i;
}
int cnt=0;
for(int i=startpoint;i>=0;i--)
{
if(arr[i]) cnt++;
}
cout<<cnt<<endl;
return 0;
}