結果
| 問題 |
No.1837 Same but Different
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2022-02-12 01:21:27 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,542 bytes |
| コンパイル時間 | 1,865 ms |
| コンパイル使用メモリ | 81,584 KB |
| 実行使用メモリ | 65,604 KB |
| 最終ジャッジ日時 | 2024-06-28 00:26:46 |
| 合計ジャッジ時間 | 5,419 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 15 WA * 8 |
ソースコード
"""
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
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)
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
#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)
SPD_9X2