結果
問題 |
No.5022 XOR Printer
|
ユーザー |
|
提出日時 | 2025-07-26 16:36:45 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 807 ms / 2,000 ms |
コード長 | 3,797 bytes |
コンパイル時間 | 284 ms |
コンパイル使用メモリ | 82,180 KB |
実行使用メモリ | 85,800 KB |
スコア | 4,667,423,523 |
最終ジャッジ日時 | 2025-07-26 16:37:29 |
合計ジャッジ時間 | 40,584 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
r""" ______________________ < it's hidehico's code > ---------------------- \ \ .--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/ """ # ライブラリと関数と便利変数 # ライブラリ import bisect import random import copy import heapq import math import sys from collections import Counter, defaultdict, deque from itertools import accumulate, combinations, permutations from math import gcd, lcm, pi from operator import itemgetter from typing import Any, List, Tuple # from atcoder.segtree import SegTree # from atcoder.lazysegtree import LazySegTree # from atcoder.dsu import DSU # cortedcontainersは使うときだけ wandbox非対応なので # from sortedcontainers import SortedDict, SortedSet, SortedList # import pypyjit # pypyjit.set_param("max_unroll_recursion=-1") sys.setrecursionlimit(5 * 10**5) import io import os import sys from typing import Any, List # インタラクティブ問題の時はIS_INTERACTIVEをTrueにしましょう # IS_INTERACTIVE = False # 標準入力関数 # if sys.argv[0] == "Main.py": # if not IS_INTERACTIVE: # input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline().decode().rstrip def s() -> str: """ 一行に一つのstringをinput """ return input() def sl() -> List[str]: """ 一行に複数のstringをinput """ return s().split() def ii() -> int: """ 一つのint """ return int(s()) def il(add_num: int = 0) -> List[int]: """ 一行に複数のint """ return list(map(lambda i: int(i) + add_num, sl())) def li(n: int, func, *args) -> List[List[Any]]: """ 複数行の入力をサポート """ return [func(*args) for _ in [0] * n] INF = 1 << 63 # コード N, T = il() A = li(N, il) def getscore(L): c = 0 NA = copy.deepcopy(A) t = 0 for i, k in L: c ^= NA[i][k] t += (i + k + 2) * 2 t += 140 for a in range(N): for b in range(N): if i != a or k != b: NA[a][b] = max(NA[a][b], NA[a][b] ^ c) t += 1 if t > T: return -INF return sum([sum(NA[i]) for i in range(N)]) def get_output(L): c = 0 NA = copy.deepcopy(A) res = [] for i, k in L: c ^= NA[i][k] res += ["D"] * i res += ["R"] * k res.append("C") res += ["L"] * k res += ["U"] * i f = False for x in range(N): y = N - 1 if f else 0 while 0 <= y < N: if (x != i or y != k) and NA[x][y] < NA[x][y] ^ c: res.append("W") NA[x][y] ^= c if (f and y != 0) or ((not f) and y != N - 1): res.append("L" if f else "R") y += -1 if f else 1 if x != N - 1: res.append("D") f ^= True res += ["U"] * (N - 1) return res l = [] sc = -INF for i in range(N): for k in range(N): nc = getscore([(i, k)]) if sc < nc: l = [(i, k)] sc = nc for ai in range(N): for ak in range(N): for bi in range(N): for bk in range(N): nc = getscore([(ai, ak), (bi, bk)]) if sc < nc: l = [(ai, ak), (bi, bk)] sc = nc for _ in [0] * 10000: m = random.randrange(3, 7) nl = [] for _ in [0] * m: x, y = random.randrange(N), random.randrange(N) while (x, y) in nl: x, y = random.randrange(N), random.randrange(N) nl += [(x, y)] nc = getscore(nl) if sc < nc: l = nl sc = nc print("\n".join(get_output(l)))