結果
| 問題 |
No.3161 Find Presents
|
| コンテスト | |
| ユーザー |
navel_tos
|
| 提出日時 | 2025-05-23 22:10:36 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,991 bytes |
| コンパイル時間 | 471 ms |
| コンパイル使用メモリ | 82,536 KB |
| 実行使用メモリ | 84,716 KB |
| 平均クエリ数 | 2.00 |
| 最終ジャッジ日時 | 2025-05-23 22:10:48 |
| 合計ジャッジ時間 | 11,075 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 80 |
ソースコード
#yukicoder 3155- KCPC新歓杯
'''
#3155
import random
N = int(input())
birthday = [tuple(map(int, input().split())) for _ in range(N)]
birthday.sort()
print('Yes' if any(birthday[i] == birthday[i + 1] for i in range(N - 1)) else 'No')
#3156
K, N = map(int, input().split())
ans = []
for x in range(1, N + 1):
if (x6 := x ** 6) > N: break
for y in range(1, N + 1):
if x6 + (y4 := y ** 4) > N: break
if (n := x6 + y4) < K: continue
z2 = n // K
if K * z2 != n: continue
z = max(0, int(z2 ** 0.5) - 2)
while z ** 2 < z2: z += 1
if z ** 2 != z2: continue
ans.append(n)
ans.sort()
cnt = 0 if len(ans) == 0 else 1
for i in range(1, len(ans)):
if ans[i - 1] != ans[i]: cnt += 1
print(cnt)
#3157
N = [int(Si) for Si in input().rstrip()]
while True:
#最上位の3を検知し、繰り下がりで消す
for i in range( len(N) ):
if N[i] == 3:
N[i] = 2
for j in range(i + 1, len(N)):N[j] = 9
break
if sum(N) % 3 == 0:
N[-1] -= 1
for i in range( len(N) - 1, -1, -1 ):
if N[i] < 0:
N[i - 1] -= 1
N[i] += 10
else: break
print(''.join([str(Si) for Si in N]))
#3158
N, M, K = map(int, input().split())
A = list(map(lambda x: int(x) - 1, input().split()))
T = [tuple(map(int, input().split())) for _ in range(N)]
#TSPするの・・・? → M <= 5なのでpermutationsで大丈夫そう
import itertools
ans = ~ ( - 1 << 63)
for S in itertools.permutations( range(N), r = M ):
dist = sum(T[ S[i] ][ S[i + 1] ] for i in range(M - 1))
for Ai in A:
ans = min( ans, dist + T[ S[-1] ][Ai] )
print(ans)
#3159
N = int(input())
P = [2, 3, 5, 7, 11, 13, 17, 19, 23]
base = 1
for p in P: base *= p
ans = [base] * 10
for i in range( len(P) ):
ans[i] //= P[i]
print(*ans[:N])
#3160
N, M = map(int, input().split())
MOD = 998244353
if N == 1:
ans = 0
for i in range(M): ans += i
exit( print(ans * pow(M, -1, MOD) % MOD ) )
#combination 余計算
fact = [x := 1] + [x := x * i % MOD for i in range(1, N + M + 1)]
finv = [x := pow(x, -1, MOD)] + [x := x * i % MOD for i in range(N + M, 0, -1)]
finv.reverse()
comb = lambda n, k: fact[n] * finv[n - k] % MOD * finv[k] % MOD if 0 <= k <= n else 0
#最低点(スコア)Siを決めうつ。残りの得点の自由度は M - (Si * N)
ans = 0
bunbo = 0
for Si in range(M):
base = M - Si * N
if base < 0: continue
#[0, base]点をN人に分配する場合の数: comb( base + N, N )
#このうち、N人が全員1点以上余計に獲得する場合の数: comb( base - N + N, N )
cnt = comb(base + N, N) - comb(base, N)
#一応手動で: base == M のとき、最高点がM点の人が制約違反となってしまう
#本来は包除原理で弾くべき?(最高点がn人として上記の包除)
#今回の制約なら引くだけでOK というか無視してもいい
if Si == 0: cnt -= N
ans += Si * cnt % MOD
bunbo += cnt
#bunbo % MOD == 0 だと破綻する が回避方法も思いつかない ので投げる
print( ans % MOD * pow(bunbo % MOD, -1, MOD) % MOD )
'''
#3161
#再帰・分割統治かな?
#stack: (xL, xR, yL, yR) : 区間内に必ずプレゼントがあると保証される区間
#区間が大きい方を再帰で探索
ans = []
stack = [(0, 10 ** 6 + 1, 0, 10 ** 6 + 1)]
while stack:
xL, xR, yL, yR = stack.pop()
if xL + 1 == xR and yL + 1 == yR:
ans.append((xL, yL))
continue
if xR - xL > yR - yL: #xのほうが長い: xを分割統治する
mid = (xL + xR) >> 1
nxt_Q = [(xL, mid, yL, yR), (mid, xR, yL, yR)]
else:
mid = (yL + yR) >> 1
nxt_Q = [(xL, xR, yL, mid), (xL, xR, mid, yR)]
for xL, xR, yL, yR in nxt_Q:
print('?', xL, xR, yL, yR)
if int(input()) == 1: stack.append((xL, xR, yL, yR))
else: pass
print('!', len(ans))
for Xi, Yi in ans: print(Xi, Yi)
navel_tos