C
来源:互联网 发布:相对湿度数据下载 编辑:程序博客网 时间:2024/06/14 00:17
题目链接:点击打开链接
Alice 在五座山上采蘑菇,已知她已经采了 n 座山(0 <= n <= 5) ,且在她回家的路上 ,会被Sunny,Lunar 和 Star三个人抢走三袋蘑菇(三代蘑菇的重量必须整除1024,如果在这五代蘑菇中不存在三袋重量和能整除1024的,则她们将抢走所有蘑菇),并且Alice的邻居会偷走Alice的1024的倍数的蘑菇(若Alice的蘑菇不大于1024,则不偷,否则偷走1024的倍数的重量),问Alice能剩余的最大蘑菇重量为多少?
暑假集训的一道题,题意好理解,结果做了好长时间也没做出来,后来看了别人的代码,结果发现思路一样,代码写的也基本一样,实在不明白哪错,后来改了又改,才对了,气死人。(做这道题的时候我在想Alice过的是啥生活,感觉好悲惨啊!!!!!!!!!!!!!!!!!!!!!)
最后附上代码:
#include <cstdio>#include <iostream>#include <string>#include <cstring>#include <algorithm>#include <iomanip>#include <cmath>using namespace std;int main(){ int n; int a[10]; ios::sync_with_stdio(false); while(cin>>n){ int sum=0; for(int i=0;i<n;i++){ cin>>a[i]; sum+=a[i]; } if(n<=3) cout<<1024<<endl; else if(n==4){ int maxx=-100; for(int i=0;i<n;i++){ if((sum-a[i])%1024==0){ maxx=1023; break; } } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ maxx=max(maxx,(a[i]+a[j]-1)%1024); } } cout<<maxx+1<<endl; } else if(n==5){ int mm=-1; int flag=0; for(int i=0;i<n;i++){ sum-=a[i]; for(int j=i+1;j<n;j++){ sum-=a[j]; if(sum%1024==0){ mm=max(mm,(a[i]+a[j]-1)%1024); } sum+=a[j]; } sum+=a[i]; } cout<<mm+1<<endl; } } return 0;}