codeforces 674回コメント


codeforces 674回コメント


後期に参加する.


私はCode Forsdiv 3 674ラウンドに参加しました.
平日の午後5時に行われたのを覚えていますが、他の日程と重なっていて忙しいです.
あとA号から5回間違えました.
もともとない精神が崩れた.
試合が終わってから、ゆっくり問題を見てみましたが、思ったより簡単でした(だからdiv 3)
A番は試合時間に解け、B、C、Eは試合終了後に解けた.
これらの問題についてコメントします.

A. Floor Number


質問リンク:https://codeforces.com/contest/1426/problem/A

問題の説明


VasyaはPetyaの家に遊びに行きます
Petyaのマンション番号n(号の概念のようです)と各階に何個の数字からなる情報(x)は、Petya家が何階なのかを当てる問題です.
1階にはいつも2つの家があり、残りの各階にはxつの家があります.

に答える


nが1または2の場合、無条件に1階に戻ります.
他の値を入力した場合は、繰り返し文で床を見つけるのに役立ちます.
import sys
input = sys.stdin.readline
     
t = int(input())
for i in range(t):
        n,x = map(int,input().split())
        floor = 1
        if n == 1 or n == 2:
            print(floor)
        else:
            floor= 2
            while True:
                limit = (floor-1)*x + 2
                if limit >= n:
                    print(floor)
                    break
                else:
                    floor+=1
私の解題は有効ではありません.
繰り返し文がなく、式で終わることができます.
では、時間の複雑さは減りますよね?

B. Symmetric Matrix


質問リンク:https://codeforces.com/contest/1426/problem/B

問題の説明


私はこれを理解したかどうか分かりませんが、私の理解方法で教えてあげます.
無制限2*2サイズのタイルがあり、n種類のタイプがあります
nが2なら
1 1
1 1
4 5
6 7
この2種類のタイルは無限です.
それらをつなぎ、回転せずにm*mコードにしたいです.
重ねてはいけません.すべてのタイルが使わなければならないわけではありません.
このようにつながっているとき、彼らは対称になることができますか?
ここでいう対称は以下の通りです.

左上から右下に線を引く場合は、上下対称にすればよい.
(上797と下797),(上88と下88)(上9と下9街)

に答える


mが奇数になると、22のタイルは絶対にmmサイズのタイルを作ることはできません.
この場合、必ずNOを出力します.
また、所定のタイルをすべて使用する条件はありません.
つまり、いいタイルがあれば、それだけでm*mサイズを作ることができます.
いいタイル自体が条件を満たす対称タイルです.

画板で作られているのでバランスが悪い.
私は上のようにabcdがあればaとdが基準線になり、bとcが同じかどうかを判断し、良いタイルを選別しました.
良いタイルがあれば、YESを出力していなければNOを出力
import sys
input = sys.stdin.readline
     
t = int(input())
for _ in range(t):
        n,m = map(int,input().split())
        check = False
        for i in range(n):
            a,b = map(int,input().split())
            c,d = map(int,input().split())
            if b == c:
                check = True
        if check and m % 2==0:
            print("YES")
        else:
            print("NO")

C. Increase and Copy


質問リンク:https://codeforces.com/contest/1426/problem/C

問題の説明


配列a=[1]がある
1ラウンド(問題ではアクションと呼ぶ)で2つのアクションのいずれかを選択して実行できます.
  • 配列の値は+1
  • である
  • 配列からランダムに数字を選択し、配列の末尾
  • にコピーします.
    だから何をしたいのか、配列のすべての数字の和(a)がnより大きいように、最小限の回転を費やしたいと思っています.
    これは最小回転数を出力する問題です.

    に答える


    配列に値を追加すると、レプリケーションは実行できません.
    最小モーションでnより大きい値を得るには、まずアレイの値を最大限に増やします(1回の動作)
    その後、コピーするとより大きな値が得られます(2回のアクション)
    そうすれば、すぐに価格に達することができます.
    私の場合、1番の動作をnの平方根に固定します.
    2番目の動作では、nの平方根は(n−1)/nの平方根−1である.
    そこで,以下の式で解く.
    import sys
    import math
    input = sys.stdin.readline
             
    t = int(input())
    for _ in range(t):
                n = int(input())
                temp = int(math.sqrt(n))
                print(temp+ ((n-1))//temp-1)
    最初は違う式で解きましたが、この式はその式より簡単なので、Editorを参考にしました.

    E. Rock, Paper, Scissors


    質問リンク:https://codeforces.com/contest/1426/problem/E

    問題の説明


    アリスとボブはじゃんけんをした.
    じゃんけんのルールはみんなよく知っているはずなのでスキップしましょう
    とりあえずn号じゃんけん
    これはアリスとボブにハサミの石布を出す回数を与えます.
    a 1はアリスの石、a 2はハサミ、a 3は布、b 1はご飯の石、b 2はハサミ、b 3は布
    問題はアリスが勝つ回数が最も少なく、アリスが勝つ回数が最も多いことだ.

    に答える


    minではなくmaxを思い浮かべることができます
    最大勝値:min(a 1,b 2)+min(a 2,b 3)+min(a 3,b 1)
    アリスの岩はボブのハサミより優れている.
    つまり、アリスが勝った状況を計算した.
    敏感な問題です.
    アリスは勝てない=負けじゃない.
    アリスは勝てない=アリスは負けたか引き分けた
    私はこれをまず表で解いてから手で解く行為を直接コードに書きましたか?
    どのように形容すればいいか分かりませんが、maxとは違って、minを求めるときに相殺する必要がある仕事です.
    相手のカードに勝てる人を早めに減らす仕事です.
    アリスのはさみ-敏(アリスのはさみ、ご飯のはさみ+ご飯の石)
    すべての相殺値を加算すると、最小値になります.
    import sys
    input = sys.stdin.readline
         
    t = int(input())
    alice = list(map(int,input().split()))
    bob = list(map(int,input().split()))
    maxwin = min(alice[0],bob[1]) + min(alice[1],bob[2])+min(alice[2],bob[0])
    minlose = (alice[0]-min(alice[0],bob[0]+bob[2])) + (alice[1]-min(alice[1],bob[1]+bob[0])) + (alice[2]-min(alice[2],bob[2]+bob[1]))
    print(minlose,maxwin)

    n/a.結論


    難しいと思い、問題も読まずに逃げてしまいました.
    中秋節の連休はただ遊んでいるだけで、大丈夫です.
    怖がる必要はない...英語だからか、もっと怖かった.
    あるいは時間制限がないのでゆったりしているので大丈夫…?
    これはどちらも接触を続けなければ修復できない欠点です.