现在的位置: 首页 > 综合 > 正文

Counterfeit Dollar hdu 1482 模拟题

2013年11月02日 ⁄ 综合 ⁄ 共 2094字 ⁄ 字号 评论关闭

有点小麻烦的模拟。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;

int vis['Z'];
int istrue['Z'];
int main()
{
	int t,i,j;
	scanf("%d",&t);
	while(t--)
	{
		int min=0x3f3f3f3f;
		int max=-0x3f3f3f3f;
		int eps=max;								//计算与特殊值的差					
		string a[3],b[3],c[3];
		memset(vis,0,sizeof(vis));
		memset(istrue,0,sizeof(istrue));
		cin>>a[0]>>b[0]>>c[0];
		cin>>a[1]>>b[1]>>c[1];
		cin>>a[2]>>b[2]>>c[2];
		for(i=0;a[0][i];i++)
			vis[a[0][i]]=vis[b[0][i]]=1000;
		for(i=0;a[1][i];i++)
			vis[a[1][i]]=vis[b[1][i]]=1000;
		for(i=0;a[2][i];i++)
			vis[a[2][i]]=vis[b[2][i]]=1000;			//给出现过的字符标上特殊值。
		for(i=0;i<3;i++)
		{
			if(c[i]=="even") 
			{
				for(j=0;a[i][j];j++)
				{
					istrue[a[i][j]]=1;				//istrue数组记录绝对正确的硬币
					istrue[b[i][j]]=1;
				}
			}
			if(c[i]=="up")
			{
				for(j=0;a[i][j];j++)
				{
					vis[ a[i][j] ]++;
					vis[ b[i][j] ]--;
				}
			}
			if(c[i]=="down")
			{
				for(j=0;a[i][j];j++)
				{
					vis[ a[i][j] ]--;
					vis[ b[i][j] ]++;
				}
			}
		}
		int ok,k;
		for(i='A';i<='L';i++)
		{
			ok=1;
			if(vis[i]==0) continue;
			if(vis[i]<min) min=vis[i];
			if(vis[i]>max) max=vis[i];
			if(istrue[i]) continue;
			
			for(j='A';j<='L';j++)						//第一次判断,假币在++,--,计算后很可能是一个只出现一次的值
			{
				if(i==j||vis[j]==0||istrue[j]) continue;
				if(vis[i]==vis[j])
				{ok=0;break;}
			}
			if(ok)
			{
				
				if(abs(vis[i]-1000)>eps) {eps=abs(vis[i]-1000);k=i;}	//再一次判断,如果相差越大,说明越是假币				
			}
		}
		if(vis[k]==min) printf("%c is the counterfeit coin and it is light.\n",k);
		else printf("%c is the counterfeit coin and it is heavy.\n",k);
	}
	return 0;
}
/*
送数据
sample input 
12 
ABCD EFGH even 
ABCI EFJK up 
ABIJ EFGH even 
AGHL BDEC even 
JKI ADE up 
J K even 
ABCDEF GHIJKL up 
ABC DEF even 
I J down 
ABCDEF GHIJKL up 
ABHLEF GDIJKC down 
CD HA even 
A B up 
B A down 
A C even 
A B up 
B C even 
DEFG HIJL even 
ABC DEJ down 
ACH IEF down 
AHK IDJ down 
ABCD EFGH even 
AB IJ even 
A L down 
EFA BGH down 
EFC GHD even 
BA EF down 
A B up 
A C up 
L K even 
ACEGIK BDFHJL up 
ACEGIL BDFHJK down 
ACEGLK BDFHJI down 
ACEGIK BDFHJL up 
ACEGIL BDFHJK down 
ACEGLK BDFHJI up 

sample output 
K is the counterfeit coin and it is light. 
I is the counterfeit coin and it is heavy. 
I is the counterfeit coin and it is light. 
L is the counterfeit coin and it is light. 
B is the counterfeit coin and it is light. 
A is the counterfeit coin and it is heavy. 
A is the counterfeit coin and it is light. 
L is the counterfeit coin and it is heavy. 
A is the counterfeit coin and it is light. 
A is the counterfeit coin and it is heavy. 
L is the counterfeit coin and it is light. 
K is the counterfeit coin and it is heavy.
*/

【上篇】
【下篇】

抱歉!评论已关闭.