当前位置:编程学习 > C/C++ >>

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

题意:
一共有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; 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,