結果
問題 | No.1837 Same but Different |
ユーザー | 👑 SPD_9X2 |
提出日時 | 2022-02-12 01:25:08 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 303 ms / 2,000 ms |
コード長 | 2,617 bytes |
コンパイル時間 | 242 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 64,256 KB |
最終ジャッジ日時 | 2024-06-28 00:31:39 |
合計ジャッジ時間 | 4,753 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 38 ms
52,224 KB |
testcase_01 | AC | 37 ms
52,352 KB |
testcase_02 | AC | 37 ms
52,480 KB |
testcase_03 | AC | 35 ms
52,736 KB |
testcase_04 | AC | 44 ms
61,056 KB |
testcase_05 | AC | 299 ms
63,488 KB |
testcase_06 | AC | 301 ms
64,128 KB |
testcase_07 | AC | 45 ms
60,928 KB |
testcase_08 | AC | 299 ms
64,000 KB |
testcase_09 | AC | 303 ms
64,256 KB |
testcase_10 | AC | 45 ms
60,800 KB |
testcase_11 | AC | 298 ms
63,720 KB |
testcase_12 | AC | 296 ms
64,256 KB |
testcase_13 | AC | 44 ms
60,672 KB |
testcase_14 | AC | 301 ms
63,360 KB |
testcase_15 | AC | 94 ms
62,592 KB |
testcase_16 | AC | 42 ms
60,032 KB |
testcase_17 | AC | 68 ms
61,312 KB |
testcase_18 | AC | 143 ms
63,104 KB |
testcase_19 | AC | 123 ms
62,592 KB |
testcase_20 | AC | 45 ms
60,544 KB |
testcase_21 | AC | 117 ms
62,464 KB |
testcase_22 | AC | 43 ms
59,776 KB |
testcase_23 | AC | 89 ms
62,080 KB |
ソースコード
""" https://yukicoder.me/problems/no/1837 Aを3の倍数 Bを1 mod 3 とする あとは総和を合わせないと… Aに対して +1,+1,+1,+1,+1,0,-2,-2,-2,-2,-2 でバランスを取れるか… +1,+1,-2 でセットなので… とりあえず 1000以上くらいの数字だけでA,Bを構築 あと、小さい要素を1 or 2個ずつ加えないといけない 1個はまじで困る →4個にする 2個を考えたい 1,4 , 999,1002,1008 2,3 , 1000,1003,1006 あー +1 が増えちゃう!! → 0,-1 で総裁 ===答えを見た=== 気合で頑張るのが正攻法 とりあえず Aは全部 0 mod 3 Bは全部 1 mod 3 ここまではok 適当に構成したら、数字が合うように3を足していけばok ・N = 0 mod 3 の時 そのままでok ・N = 1 mod 3 の時 Aを1個 mod 1 にすればok ・N = 2 mod 3 の時 Aを2個 mod 1 にする。 この時, この2個の数字の和が Bのmin2個の和より小さければok """ import sys from sys import stdin def is_ok(A,B): assert sum(A) == sum(B) sa = set() for i in A: for j in A: sa.add(i+j) sb = set() for i in B: for j in B: sb.add(i+j) return sa & sb N = int(stdin.readline()) if N % 3 == 0: btype = [-2] * (N//3) + [1] * (2*N//3) A = [3*(i+1) for i in range(N)] B = [A[i]+btype[i] for i in range(N)] print (" ".join(map(str,A))) print (" ".join(map(str,B))) print (is_ok(A,B) , file=sys.stderr) elif N % 3 == 1: btype = [-2] * (N//3) + [1] * (N - N//3) A = [3*(i+1) for i in range(N)] B = [A[i]+btype[i] for i in range(N)] A[-1] += 7 B[-1] += 3 B[-2] += 3 A.sort() B.sort() print (" ".join(map(str,A))) print (" ".join(map(str,B))) print (is_ok(A,B) , file=sys.stderr) else: M = N-2 btype = [-2] * (M//3) + [1] * (2*M//3) A = [3*(i+10) for i in range(M)] B = [A[i]+btype[i] for i in range(M)] A.append(1) A.append(4) B.append(B[-1] + 3) B.append(B[-1] + 3) Asum = sum(A) Bsum = sum(B) A.sort() B.sort() if Asum >= Bsum: B[-1] += Asum - Bsum else: rem = Bsum - Asum while rem > 0: for j in range(len(A)-1,1,-1): A[j] += 3 rem -= 3 if rem <= 0: break A.sort() B.sort() #print (B[-1],A[-1]) assert max(A) <= 10000 assert max(B) <= 10000 print (" ".join(map(str,A))) print (" ".join(map(str,B))) #print (is_ok(A,B) , file=sys.stderr)