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 mystj at 2006-09-14 14:58:06 on Problem 1011
不用考虑输入的数据大于50的情况吧



#include <stdio.h>
#include <stddef.h>


int sticks[64];
int used[64];
int count;
int len;
int flag;
int total;


void sort(int* taget, int sum)
{
	int i, j, temp;
	int flag;
	for (i=sum-1, flag=1; i>0 && flag==1; --i)
	{
		flag = 0;
		for (j=0; j<i; j++)
		{
			if (taget[j] < taget[j+1])
			{
				temp = taget[j];
				taget[j] = taget[j+1];
				taget[j+1] = temp;
				flag = 1;
			}
		}
	}
}


void search(int now, int index, int number)
{
	int i, temp;
	for (i=index+1; i<count; i++)
	{
		if (number > 1 && used[i-1] == 0 && used[i] == used[i-1])
		{
			continue;
		}
		if (used[i] == 0)
		{
			temp = now + sticks[i];
			if (temp > len)
			{
				continue;
			}
			else
			{
				if (temp < len)
				{
					used[i] = 1;
					search(temp, i, number);
					if (flag == 1)
					{
						return;
					}
					else
					{
						used[i] = 0;
					}
				}
				else
				{
					if (number == total)
					{
						flag = 1;
						return;
					}
					else
					{
						used[i] = 1;
						search(0, 0, number+1);
						if (flag == 1)
						{
							return;
						}
						else
						{
							used[i] = 0;
							return;
						}
					}
				}
			}
		}
	}
}

int main()
{
	int max, sum, i;

	while (scanf("%d", &count) && count!= 0)
	{
		max = sum = 0;
		for (i=0; i<count; i++)
		{
			scanf("%d", &sticks[i]);
			sum += sticks[i];
			used[i] = 0;
		}
		sort(sticks, count);
		if (sticks[0] == sticks[count-1])
		{
			printf("%d\n", sticks[0]);
			continue;
		}
		max = sticks[0];
		for (i=max+1; i<sum; i++)
		{
			if (sum % i == 0)
			{
				total = sum / i;
				flag = 0;
				len = i;
				used[0] = 1;
				search(sticks[0], 0, 1);
				if (flag == 1)
				{
					printf("%d\n", len);
					break;
				}
			}
		}
		if (flag == 0)
		{
			printf("%d\n", sum);
		}
	}
	return 0;
}

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