ZOJ 3657 The Little Girl who Picks Mushrooms(12年长春区域赛-C题)

2014-11-24 09:48:16 · 作者: · 浏览: 0
题意:
一共有5座山,有人拿5个篮子去采蘑菇,现在他已经采了几座山上的蘑菇,之后几座山的蘑菇数量你可以自己确定。但是他要交出3个篮子,且它们的和必须是1024的倍数。否则,剩余两个篮子也要交出。之后,如果剩余数量大于1024要减去1024直到不大于。问最后剩余的最大值。
解题思路:
水题,WA了5次,我还以为是题意理解错了。。原来有坑。。交3个篮子的时候,它们的和可以是0。。
贴个简化后的代码。
[cpp]
#include
#include

using namespace std;

int n,a[6],sum,ans;

bool mult(int x)
{
return x%1024==0;
}

int calc(int x)
{
while(x > 1024)
x -= 1024;
return x;
}

void solve()
{
for(int i=0;i for(int j=i+1;j
if(n==4 || mult(sum-a[i]-a[j]))
ans = max(ans,calc(a[i]+a[j]));
}

int main()
{
while(~scanf("%d",&n))
{
sum = 0,ans = 0;
for(int i=0;i {
scanf("%d",&a[i]);
sum += a[i];
}
if(n<=3)
ans = 1024;
else
if(n==4)
for(int i=0;i<4;i++)
if(mult(sum-a[i]))
ans = 1024;
if(ans!=1024)
solve();
printf("%d\n",ans);
}
return 0;
}