题目描述如下:
此题考查二进制计算,货物质量为,货物质量相加为2的幂次才可以搬运,由此想到二进制运算,例如当wi分别为1,1时,则可以搬运(because 1+1=10);wi分别为2,2时,可以搬运(10+10=100),100+100=1000,1+1+10+100+1000+10000=100000,诸如此类。
下面附上源码:
#include<stdio.h>
#include<string.h>
#define maxn 1000100
int w[maxn];
int main()
{
int n,i;
while(scanf("%d",&n)!=EOF)
{
memset(w,0,sizeof(w));
//统计每种货物的个数
while(n--)
{
scanf("%d",&i);
w[i]++;
}
int sum=0;
for(int j=0;j<maxn;++j)
{
//二进制运算
if(w[j]>1)
{
w[j+1]+=w[j]/2;
w[j]%=2;
}
if(w[j]==1)
++sum;
}
printf("%d\n",sum);
}
return 0;
}