結果
問題 | No.1803 Remainder of Sum |
ユーザー |
👑 ![]() |
提出日時 | 2022-01-08 15:59:58 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 95 ms / 2,000 ms |
コード長 | 1,508 bytes |
コンパイル時間 | 216 ms |
コンパイル使用メモリ | 82,156 KB |
実行使用メモリ | 83,720 KB |
最終ジャッジ日時 | 2024-11-14 09:27:20 |
合計ジャッジ時間 | 2,151 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 8 |
ソースコード
"""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を達成できる12345761-2 -> 31-3 -> 47-4 -> 16-5 -> 1みたいな場合も、5-6で行けるので無問題123456987これは、13がmodの場合1,2,3に関してはどう頑張っても 13を超えられないなので、1-21-31-4 が一番安い123455-4 -> 11-3 -> 41-2 -> 3"""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)+1)//2ans += B-1else:ans = 1*(N-1) + (2+N)*(N-1)//2ANS.append(ans)print ("\n".join(map(str,ANS)))