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;}