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

我的方案;每个硬币一个权重 遇到平衡时,每一个硬币一定为真币(让其权重为“无穷小”)。每遇到一次不平衡时,每一个币都受怀疑,权重加一 (见正文)

Posted by peterpan at 2005-10-12 02:26:46 on Problem 1013
我的方案;每个硬币一个权重 初始为0
每遇到一次平衡时,其中每一个硬币一定为真币(让其权重为“无穷小”)。
每遇到一次不平衡时,其中每一个币都受怀疑,权重++。(因为真币是无穷小 所以不妨碍)
(这个方案平衡出现的顺序也不会影响)

最后权重最大的硬币为 假币

接着判断轻重
假币位置在右边的且up   该假币light
假币位置在左边的且down  该假币light
其余情况heavy

这样思路是否可行?

sample和前面同学提供的测试都过了
但是依然WA 不知为何 
附上代码:
敬请高手指点

#include <iostream>
#include <algorithm>
using namespace std;
#define INFINE -10000

int  Ftime[12];//权重数组
//被猜测为假的次数 最多硬币的为假币 (当某一个被确认为真币 则这个值为无穷小)
int  len[3];//记录每次称重硬币数量
int main()
{
	int i,j,k,l;
	int casenum;
	int blank =0;
	char input[3][1024];

//	freopen("1013.txt", "r", stdin);	

	scanf("%d ",&casenum);

	for(i=0;i<casenum;i++)
	{

		//initialize
		for(j=0;j<12;j++)
		{
			Ftime[j]  =0 ;
			len[j] = 0;
		}

		for(l=0;l<3;l++)
		{
			gets(input[l]);
			
			//平衡 全为真
			if(strstr(input[l],"even") != NULL)//匹配even成功
				for(k=0;;)
				{
					for(;isalpha(input[l][k]);k++)
					{
						Ftime[input[l][k]-'A'] = INFINE;
					}
					while(isspace(input[l][k]))
					{k++;blank=k;//空格
					}
					for(;isalpha(input[l][k]);k++)
					{
						Ftime[input[l][k]-'A'] = INFINE;
					}
					len[l] = k-blank;
					break;
				}

				
			//不平衡 
			if(strstr(input[l],"even") == NULL)//匹配even不成功
				for(k=0;;)
				{
					for(;isalpha(input[l][k]);k++)
					{
						//怀疑假	
						Ftime[input[l][k]-'A'] ++;
					}
					while(isspace(input[l][k]))
					{	k++;blank=k;//空格
					}
					for(;isalpha(input[l][k]);k++)
					{
						//怀疑假	
						Ftime[input[l][k]-'A'] ++;
					}
					len[l] = k-blank;
					break;
				}



		}


		int max = max_element(Ftime,Ftime+12)-Ftime;//查找权重最大的元素下标

		char weight[]="heavy";//默认值
		for(l=0;l<3;l++)
		{
			if((strchr(input[l],max+'A')-input[l] ) > len[l]/2 )//在天平右边
			{
				if(strstr(input[l],"up") != NULL )//匹配up成功
					strcpy(weight,"light");
			}
			else
				if((strchr(input[l],max+'A')-input[l] ) > 0 )//在天平右边
				{
					if(strstr(input[l],"down") != NULL )//匹配down成功
						strcpy(weight,"light");
				}
		}		

		printf("%c is the counterfeit coin and it is %s. \n",max+'A',weight);


	}
	

	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