题目描述如下:


此题考查二进制计算,货物质量为,货物质量相加为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;
}
本文探讨了如何使用二进制运算解决特定的货物搬运问题,即只有当货物总重量等于2的幂次时才能进行搬运。通过源代码展示了解决方案,涉及到二进制运算和数组操作。
300

被折叠的 条评论
为什么被折叠?



