這個題目很簡單 用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;
}