Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

wa了好多次。。。。。。。。。。。。。。然后莫名奇妙的过了

Posted by yangyangyang91 at 2011-08-05 12:43:55 on Problem 1014
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<queue>
using namespace std;

bool f[100][50000];

int main()
{
    int n[7];
    int mol[7]={0,60*30,30*20,20*15,15*12,12*10,10};
    for(int t=1;;t++)
    {
        int k=0;
        for(int i=1;i<7;i++)
        {scanf("%d",&n[i]);if(n[i])k=1;}
        if(!k)return 0;
        printf("Collection #%d:\n",t);

        int sum=0;
        for(int i=1;i<7;i++)
        {
            n[i]%=mol[i];
            sum+=i*n[i];
        }

        if(sum%2){printf("Can't be divided.\n\n");continue;}
        sum/=2;

        queue <int> s;
        for(int i=1;i<7;i++)
        {
            if(!n[i])continue;
            int j;
            for(j=1;2*j-1<n[i];j*=2)
            {
                s.push(j*i);
                //printf("%d\n",i*j);
            }
            s.push((n[i]-j+1)*i);
            //printf("%d\n",(n[i]-j+1)*i);
        }

        memset(f,false,sizeof(f));
        f[0][0]=true;
        int x;
        bool re=false;

        for(int i=1;!s.empty();i++,s.pop())
        {
            x=s.front();
            for(int j=0;x<=sum&&j<=sum-x;j++)
            {
                 if(f[i-1][j])
                 {f[i][j]=true;f[i][j+x]=true;}
                 if(f[i][sum]){re=true; goto inx;}
            }
        }
inx:
        if(re)printf("Can be divided.\n\n");
        else
        printf("Can't be divided.\n\n");
    }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator