USACO 2019 January Contest, Bronze
Problem 1. Shell Game | 贝壳游戏
为了消磨时光,奶牛Bessie和她的朋友Elsie喜欢玩一种她们在农业展览会上看到的游戏。
游戏准备阶段,Bessie在桌子上放置三个倒置的坚果壳,并在其中一个坚果壳下面藏了一块小的鹅卵石(至少她希望这是一块鹅卵石——她在一块牧场的地上找到的)。随后Bessie会两两调换坚果壳,同时Elsie试着去猜鹅卵石的位置。
奶牛们在农业展览会上看到的这个游戏的标准形式是玩家可以看到鹅卵石初始的位置,然后要求玩家猜所有交换完成之后鹅卵石最终的位置。
然而,现在奶牛们想要去进行这样一种玩法,Elsie不知道鹅卵石的初始位置,同时她可以在每一次交换之后猜一下鹅卵石的位置。Bessie知道正确答案,在游戏结束后会给Elsie一个分数,等于她猜对的次数。
给定所有的交换和Elsie的猜测,但是不给出鹅卵石的初始位置,请求出Elsie最高可能获得的分数。
输入格式(文件名:shell.in):
输入的第一行包含一个整数N,为交换的次数(1≤N≤100)。以下N行每行描述了游戏的一个回合,包含三个整数a、b和g,表示Bessie交换了坚果壳a和b,然后Elsie猜的是坚果壳g。所有这三个数均为1、2、3之一,并且a≠b。
输出格式(文件名:shell.out):
输出Elsie可以得到的最高分数。
输入样例:
3 1 2 1 3 2 1 1 3 1
输出样例:
2
在这个例子中,Elsie最多可以获得2分。如果鹅卵石开始时位于坚果壳1下面,那么她猜中了一次(最后一次)。如果鹅卵石开始时位于坚果壳2下面,那么她猜中了两次(开始两次)。如果鹅卵石开始时位于坚果壳3下面,那么她没有猜对任何一次。
供题:Brian Dean
=====Analysis=====
Tag :模拟
这是一道非常简单的题目,题目的意思很明显,这种游戏大部分人都见过
首先模拟3个杯子,这里是 a, b, c
然后先进行变换,再记录Bessie选择的是哪一个杯子
最后返回最多的那个杯子数即可
=====Code=====
fin = open('shell.in','r')
fout = open('shell.out','w')
lines = fin.read().splitlines()
N = int(lines[0])
def solve(N,lines):
times = {'a':0, 'b':0, 'c':0}
shells = ['a','b','c']
for i in range(1,N+1):
a, b, g = (int(x) for x in lines[i].split())
shells[a-1], shells[b-1] = shells[b-1], shells[a-1]
times[shells[g-1]] += 1
return fout.write(f'{max(times.values())}\n')
solve(N,lines)
fout.close