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 xiewei20082008 at 2008-06-07 11:19:17 on Problem 1014
#include <iostream>
using namespace std;
int input(int *predi,int &length,int &resum);
void casum(int *predi,int length,int &leofsum,int *sum);
int main()
{
	int open=0;
	while(1)
	{
		
		int predi[2000];
		int length;
		int resum;
		//prediving;
		if(input(predi,length,resum)==0)
			break;
		/*
		for(int i=1;i<=length;i++)
			cout<<predi[i]<<' ';
		cout<<endl;
		*/
		if(resum%2!=0||length==1)
		{
			++open;
			cout<<"Collection #"<<open<<":\nCan't be divided."<<endl<<endl;
			continue;
		}
		/*
		for(int i=1;i<=length;i++)
		{
			cout<<predi[i]<<' ';
		}
		*/
		int leofsum;
		int sum[4000];
		memset(sum,0,400*sizeof(int));
		//lengthofsum;
		int canbe=0;
		casum(predi,length-1,leofsum,sum);
		//calculate sum;
		for(int i=1;i<=leofsum;++i)
		{
			if(resum/2==sum[i])
			{
				++open;
				cout<<"Collection #"<<open<<":\nCan be divided."<<endl<<endl;
				canbe=1;
				break;
			}
		}
		if(canbe==0)
		{
			++open;
			cout<<"Collection #"<<open<<":\nCan't be divided."<<endl<<endl;
		}
		
	}
}
void casum(int *predi,int length,int &leofsum,int *sum)
{
	if(length==1)
	{
		leofsum=1;
		sum[length]=predi[length];
		return;
	}
	else																//这里尝试用折半
	{
		//int temp[200];
		int *temp=new int[2000];
		temp[1]=predi[length];
		casum(predi,length-1,leofsum,sum);
		int i_1;	//临时和的长度
		for(i_1=1;i_1<=leofsum;)	//对临时和的赋值
		{
			++i_1;
			temp[i_1]=predi[length]+sum[i_1-1];
			//cout<<temp[i_1]<<' ';
		}
		//cout<<endl;
		for(int i=1;i<=i_1;++i)	//将临时和加在末尾
		{
			sum[0]=temp[i];
			int j=1;
			//int j=leofsum;
			while(sum[0]>sum[j]&&j<=leofsum)
			{
				++j;
			}
			if(sum[0]!=sum[j])
			{
				int k=leofsum;
				while(k>=j)
				{
					sum[k+1]=sum[k];
					--k;
				}
				sum[k+1]=sum[0];
				++leofsum;
			}
		}
		/*
		for(int i=1;i<=leofsum;i++)
			cout<<sum[i]<<' ';
		cout<<endl;
		*/
		delete[] temp;
	}
	
}

int input(int *predi,int &length,int &resum)
{
	resum=0;
	int nofma=0;
	//NumofMarble;
	for(int vaofnum=1;vaofnum<=6;++vaofnum)
	{//Valueofnum
		int temp;
		cin>>temp;
		///*
		if(temp>6&&temp%2==0)
			temp=6;
		else if(temp>6&&temp%2==1)
			temp=5;
		//*/
		for(int i=1;i<=temp;++i)
		{
			nofma++;
			predi[nofma]=vaofnum;
			resum+=vaofnum;
		}
	}
	if(nofma==0)
		return 0;
	length=nofma;
}


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