A.Good ol' Numbers Coloring
题目大意:如果涂成黑色块的块数无限,输出infinite,如果有限,输出finite。
分析:只用判断一下gcd是不是等于1,如果等于1,输出finite,如果不等于1,输出infinite。
代码:
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
t = input()
t = int(t)
for i in range(t):
a, b = input().split()
a = int(a)
b = int(b)
if gcd(a, b) == 1:
print("Finite")
else:
print("Infinite")
B.Restricted RPS
题目大意:石头剪刀布的游戏,一个人的出石头剪刀布的情况是已知的,另一个人是未知的,但是你知道另外一个人的出的次数的情况。让你找一种可以让那个人赢的情况,如果不能的话,输出NO,否则输出YES,并输出一种可行的方法。
分析:贪心即可,先尽量让第一个人赢,看看能赢不,再把剩下的往上添就好了。
代码:
t = input()
t = int(t)
for i in range(t):
n = input()
n = int(n)
a, b, c = input().split()
a = int(a)
b = int(b)
c = int(c)
s = input()
lose = 0
way = []
for ch in s:
if ch == 'R' and b > 0:
b -= 1
way.append('P')
elif ch == 'P' and c > 0:
c -= 1
way.append('S')
elif ch == 'S' and a > 0:
a -= 1
way.append('R')
else:
lose += 1
way.append('T')
if lose > n//2:
print("NO")
continue
print("YES")
for ch in way:
if ch == 'T':
if a > 0:
a -= 1
print('R', end = "")
elif b > 0:
b -= 1
print('P', end = "")
else:
c -= 1
print('S', end = "")
else:
print(ch, end = "")
print()
C.Constanze's Machine
题目大意:当键入w的时候会键入uu,当键入m的时候会键入nn。给定一个字符串,问你这个字符串本来应该是什么,输出可能的种类数mod1e9+7。
分析:这是一个简单的线性dp。推出状态转移方程就好了。
代码:
mod = int(1e9 + 7)
s = input()
dp = []
n = len(s)
for i in range(n+1):
dp.append(0)
dp[0] = 1
flag = False
if s[0] == 'w' or s[0] == 'm':
flag = True
for i in range(n):
if i == 0:
continue
dp[i] = dp[i-1]
if s[i] == 'w' or s[i] == 'm':
flag = True
if s[i] == 'u' and s[i-1] == 'u':
if i == 1:
dp[i] = (dp[i] + 1) % mod
else:
dp[i] = (dp[i] + dp[i-2]) % mod
if s[i] == 'n' and s[i-1] == 'n':
if i == 1:
dp[i] = (dp[i] + 1) % mod
else:
dp[i] = (dp[i] + dp[i-2]) % mod
if flag == True:
print(0)
else:
print(dp[n-1])
来源:https://www.cnblogs.com/SwiftAC/p/12153187.html