codeforces vj上链接https://vjudge.net/problem/CodeForces-587A
这道题在51nod上有点坑= =评测系统不好 用CF一次过(逃
有两组数据一直TLE 各种改 (没用cin cout
一种方法是另写一个基于getchar()的输入函数
二是把C++提交的选项改成C 仅仅是这样
//codeforces 587A div1
#include <stdio.h>
#include <string.h>
#include <math.h>
int a[2000005];
int main()
{
memset(a,0,sizeof(a));
int T,x;
scanf("%d",&T);
while(T--)
{
scanf("%d",&x);
a[x]++;
}
int num=0,i;
for(i=0;i<=2000005;i++)
{
a[i+1]+=a[i]>>1;//a[i+1]+=a[i]/2;
num+=a[i]&1;//num+=a[i]%2;
}
//另一种写法可能便于理解
/* int j;
for(j=0;j<=2000005;j++)
{
if(a[j]>1)
{
a[j+1]+=a[i]/2;
a[j]%=2;
}
num+=a[j];
}
*/
printf("%d\n",num);
return 0;
}
另外逐渐熟悉 a>>1 和a/=2等价
a&1和a%2等价 位运算更快