• 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])
  • 相关阅读:
    51单片机寄存器组的设置(转)
    51单片机堆栈深入剖析(转)
    do{...}while(0)的妙用(转)
    优化C/C++代码的小技巧(转)
    Struts2返回json
    详略。。设计模式1——单例。。。。studying
    [深入理解Android卷一全文-第十章]深入理解MediaScanner
    《python源代码剖析》笔记 Python虚拟机框架
    jQuery Validation让验证变得如此easy(三)
    mysql高可用架构方案之中的一个(keepalived+主主双活)
  • 原文地址:https://www.cnblogs.com/SwiftAC/p/12153187.html
Copyright © 2020-2023  润新知