Codeforces Round #597 (Div. 2)

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])

你可能感兴趣的:(Codeforces Round #597 (Div. 2))