結果

問題 No.282 おもりと天秤(2)
ユーザー maspymaspy
提出日時 2020-03-20 00:10:38
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 783 ms / 5,000 ms
コード長 1,769 bytes
コンパイル時間 151 ms
コンパイル使用メモリ 10,756 KB
実行使用メモリ 46,260 KB
平均クエリ数 512.00
最終ジャッジ日時 2023-09-24 02:33:05
合計ジャッジ時間 13,379 ms
ジャッジサーバーID
(参考情報)
judge14 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 175 ms
46,092 KB
testcase_01 AC 230 ms
45,452 KB
testcase_02 AC 199 ms
46,168 KB
testcase_03 AC 200 ms
46,168 KB
testcase_04 AC 195 ms
45,876 KB
testcase_05 AC 214 ms
45,848 KB
testcase_06 AC 230 ms
45,552 KB
testcase_07 AC 197 ms
45,976 KB
testcase_08 AC 225 ms
45,844 KB
testcase_09 AC 183 ms
45,476 KB
testcase_10 AC 468 ms
45,548 KB
testcase_11 AC 728 ms
46,024 KB
testcase_12 AC 488 ms
45,696 KB
testcase_13 AC 560 ms
45,784 KB
testcase_14 AC 675 ms
45,816 KB
testcase_15 AC 743 ms
46,260 KB
testcase_16 AC 308 ms
46,052 KB
testcase_17 AC 530 ms
45,740 KB
testcase_18 AC 651 ms
45,980 KB
testcase_19 AC 653 ms
46,088 KB
testcase_20 AC 777 ms
46,200 KB
testcase_21 AC 781 ms
45,872 KB
testcase_22 AC 783 ms
45,920 KB
testcase_23 AC 169 ms
45,408 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#!/usr/bin/ python3.8
import sys
readline = sys.stdin.readline
import numpy as np
N = int(readline())

# DEBUG = True
DEBUG = False


class Interactive:
    def __init__(self):
        self.ques_cnt = 0
        self.create_data()

    def create_data(self):
        self.C = np.arange(1, N + 1)
        np.random.shuffle(self.C)
        self.wt = self.C.argsort()
        print(self.C)
        print(self.wt)

    def resp_ques(self, *args):
        LR = np.array(args) - 1
        L = self.wt[LR[::2]]
        R = self.wt[LR[1::2]]
        ret = np.zeros(N, 'U1')
        ret[L > R] = '>'
        ret[L < R] = '<'
        ret[L == R] = '='
        word = ' '.join(ret)
        return word + '\n'

    def resp_ans(self, *args):
        C = np.array(args)
        print(np.all(self.C == C))


if DEBUG:
    interactive = Interactive()


def question(*args, offset='?'):
    if offset is None:
        print(*args, flush=True)
    else:
        print(offset, *args, flush=True)
    if DEBUG:
        resp = interactive.resp_ques(*args)
        print(resp, end='')
        return resp
    else:
        return readline()


def answer(*args, offset='!'):
    if offset is None:
        print(*args, flush=True)
    else:
        print(offset, *args, flush=True)
    if DEBUG:
        interactive.resp_ans(*args)
    else:
        exit()


wt = np.zeros(N + 1, np.int32)

for i in range(1, 512):
    LR = []
    for L in range(N):
        R = L ^ i
        if L < R < N:
            LR.append(L + 1)
            LR.append(R + 1)
    LR += [0] * (N + N - len(LR))
    resp = np.array(question(*LR).rstrip().split())
    LR = np.array(LR, np.int32)
    L = LR[::2]
    R = LR[1::2]
    wt[L] += (resp == '>')
    wt[R] += (resp == '<')

C = np.argsort(wt[1:]) + 1
answer(*C)
0