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

Re:为什么是WA?上面的测试数据我都试过啦,没错呀,还有特殊的测试数据吗?

Posted by yueliang at 2007-04-08 19:46:13 on Problem 1011
In Reply To:为什么是WA?上面的测试数据我都试过啦,没错呀,还有特殊的测试数据吗? Posted by:mystj at 2006-09-14 14:58:06
> 不用考虑输入的数据大于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