題意:
一共有5座山,有人拿5個籃子去采蘑菇,現在他已經采了幾座山上的蘑菇,之後幾座山的蘑菇數量你可以自己確定。但是他要交出3個籃子,且它們的和必須是1024的倍數。否則,剩余兩個籃子也要交出。之後,如果剩余數量大於1024要減去1024直到不大於。問最後剩余的最大值。
解題思路:
水題,WA了5次,我還以為是題意理解錯了。。原來有坑。。交3個籃子的時候,它們的和可以是0。。
貼個簡化後的代碼。
[cpp]
#include <stdio.h>
#include <algorithm>
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<n;i++)
for(int j=i+1;j<n;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<n;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;
}