結果
問題 | No.1803 Remainder of Sum |
ユーザー |
👑 ![]() |
提出日時 | 2022-01-08 15:51:18 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,427 bytes |
コンパイル時間 | 749 ms |
コンパイル使用メモリ | 82,112 KB |
実行使用メモリ | 84,392 KB |
最終ジャッジ日時 | 2024-11-14 09:27:16 |
合計ジャッジ時間 | 2,164 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 1 WA * 7 |
ソースコード
"""https://yukicoder.me/problems/no/1803お互い消す数字間に辺を貼るすると、サイクルがあってはいけない。また、全体は連結である必要がある。よって、木になる!!mod Mで最小全域木を求めればよい。1~Nなので…M <= Nの場合、全て、以下のようにペアになる。1,M-12,M-2......M-1,1連結成分の個数は,M=1 -> 0M=2 -> 0,1M=3 -> 0,1M=4 -> 0,1,2M=5 -> 0,1,2なので、 M//2 + 1あとは、連結成分をコスト1で減らせるのでやって終わりそうでない場合…?コスト1では連結できない12348765の場合 2-8 3-7 4-6 でコスト1を達成できる1234 576みたいな場合も、5-6で行けるので無問題123456987これは、13がmodの場合1,2,3に関してはどう頑張っても 13を超えられないなので、1-21-31-4 が一番安い"""import sysfrom sys import stdinTT = int(stdin.readline())ANS = []for loop in range(TT):N,M = map(int,stdin.readline().split())if M <= N:parts = (M//2) + 1ans = parts-1else:A = M - Nif A < N:#1-2,1-3, ... , 1-A をリンクans = 1*(A-1) + (2+A)*(A-1)//2B = (N-(A-1))//2ans += Belse:ans = 1*(N-1) + (2+N)*(N-1)//2ANS.append(ans)print ("\n".join(map(str,ANS)))