4.Counterfeit Dollar
http://acm.fzu.edu.cn/problem.php?pid=1003
由于只有一枚是假的,因此若出现左右不平衡的情况,则没有放在天枰上的银币一定是真的。先根据第一和第二次称重的结果情况来确定出一定是真的银币以及可能是假的银币,然后在第三次称重重,若出现可能是假的银币在此次称重后确定的结论和之前的结论矛盾,则该银币为真,否则为假。
import sys
lines=sys.stdin.readlines()
if lines:
# 包含每一枚银币信息的字典
dic={x:{'isreal':False,'info':['unknown','uncertain']} for x in range(ord('A'),ord('L')+1)}
# 测试用例数
case_num=int(lines[0].strip())
for case in range(0,case_num):
time1=list(lines[1+case].rstrip().split(' '))
time2=list(lines[2+case].rstrip().split(' '))
time3=list(lines[3+case].rstrip().split(' '))
for time in time1,time2,time3:
time[0]=list(time[0])
time[1]=list(time[1])
for time in time1,time2,time3:
ords=[]
ords.extend(ord(x) for x in time[0])
ords.extend(ord(x) for x in time[1])
if time[2]=='even':
for key in ords:
dic[key]['isreal']=True
dic[key]['info']=['real','certain']
else:
for key in dic:
if not key in ords:
dic[key]['isreal']=True
dic[key]['info']=['real','certain']
if time[2]=='up':
for x in time[0]:
if not dic[ord(x)]['isreal']:
if dic[ord(x)]['info'][0]=='unknown':
dic[ord(x)]['info'][0]='heavy'
if dic[ord(x)]['info'][0]=='heavy':
dic[ord(x)]['info'][1]='certain'
if dic[ord(x)]['info'][0]=='light':
dic[ord(x)]['isreal']=True
dic[ord(x)]['info']=['real','certain']
for x in time[1]:
if not dic[ord(x)]['isreal']:
if dic[ord(x)]['info'][0]=='unknown':
dic[ord(x)]['info'][0]='light'
if dic[ord(x)]['info'][0]=='heavy':
dic[ord(x)]['isreal']=True
dic[ord(x)]['info']=['real','certain']
if dic[ord(x)]['info'][0]=='light':
dic[ord(x)]['info'][1]='certain'
if time[2]=='down':
for x in time[0]:
if not dic[ord(x)]['isreal']:
if dic[ord(x)]['info'][0]=='unknown':
dic[ord(x)]['info'][0]='light'
if dic[ord(x)]['info'][0]=='light':
dic[ord(x)]['info'][1]='certain'
if dic[ord(x)]['info'][0]=='heavy':
dic[ord(x)]['isreal']=True
dic[ord(x)]['info']=['real','certain']
for x in time[1]:
if not dic[ord(x)]['isreal']:
if dic[ord(x)]['info'][0]=='unknown':
dic[ord(x)]['info'][0]='heavy'
if dic[ord(x)]['info'][0]=='light':
dic[ord(x)]['isreal']=True
dic[ord(x)]['info']=['real','certain']
if dic[ord(x)]['info'][0]=='heavy':
dic[ord(x)]['info'][1]='certain'
for key in dic:
if not dic[key]['isreal']:
print('{0} is the counterfeit coin and it is {1}.'.format(chr(key),dic[key]['info'][0]))
break