結果
| 問題 |
No.3161 Find Presents
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-23 20:37:08 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 487 ms / 4,000 ms |
| コード長 | 1,674 bytes |
| コンパイル時間 | 2,441 ms |
| コンパイル使用メモリ | 82,188 KB |
| 実行使用メモリ | 95,704 KB |
| 平均クエリ数 | 3403.19 |
| 最終ジャッジ日時 | 2025-05-23 20:37:47 |
| 合計ジャッジ時間 | 26,194 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 80 |
ソースコード
#にぶたん4000回以内にプレゼントが存在する行の集合を特定できるか?
#二つに分けた領域両方について質問すれば、今後調べる必要のない範囲はわかる
gyou_sonzai=[[0,1000001]]
#領域は半開区間で持つ
gyou_sonzai_kakutei=[]
while len(gyou_sonzai)>0:
z=gyou_sonzai.pop(-1)
small=False
big=False
kyoukai=(z[0]+z[1])//2
print("?",0,1000000,z[0],kyoukai-1)
a=int(input())
small=True if a==1 else 0
print("?",0,1000000,kyoukai,z[1]-1)
b=int(input())
big=True if b==1 else 0
if small:
if kyoukai-z[0]==1:
gyou_sonzai_kakutei.append(z[0])
else:
gyou_sonzai.append([z[0],kyoukai])
if big:
if z[1]-kyoukai==1:
gyou_sonzai_kakutei.append(kyoukai)
else:
gyou_sonzai.append([kyoukai,z[1]])
ans=[]
#ここから列を確定していく
for gyou in gyou_sonzai_kakutei:
retu_sonzai=[[0,1000001]]
while len(retu_sonzai)>0:
z=retu_sonzai.pop(-1)
small=False
big=False
kyoukai=(z[0]+z[1])//2
print("?",z[0],kyoukai-1,gyou,gyou)
a=int(input())
small=True if a==1 else 0
print("?",kyoukai,z[1]-1,gyou,gyou)
b=int(input())
big=True if b==1 else 0
if small:
if kyoukai-z[0]==1:
ans.append([z[0],gyou])
else:
retu_sonzai.append([z[0],kyoukai])
if big:
if z[1]-kyoukai==1:
ans.append([kyoukai,gyou])
else:
retu_sonzai.append([kyoukai,z[1]])
print("!",len(ans))
for i in ans:
print(*i)