結果
問題 |
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)