結果
| 問題 |
No.223 1マス指定の魔方陣
|
| コンテスト | |
| ユーザー |
maspy
|
| 提出日時 | 2020-03-28 13:59:01 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 423 ms / 5,000 ms |
| コード長 | 1,275 bytes |
| コンパイル時間 | 333 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 31,604 KB |
| 最終ジャッジ日時 | 2025-01-02 11:14:17 |
| 合計ジャッジ時間 | 22,742 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 46 |
ソースコード
#!/usr/bin/ python3.8
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
import numpy as np
class Fq(int):
deg = 2
irr_poly = 7
@classmethod
def set_degree(cls, d):
cls.deg = d
cls.irr_poly = [1, 2, 7, 11, 19][d]
@classmethod
def iter_all(cls):
return (Fq(i) for i in range(1 << cls.deg))
def __add__(self, other):
return Fq(self ^ other)
def __mul__(self, other):
ret = 0
d = self.__class__.deg
p = self.__class__.irr_poly
for i in range(d):
if (other >> i) & 1:
ret ^= self << i
for i in range(d - 2, -1, -1):
if ret & (1 << d + i):
ret ^= p << i
return Fq(ret)
N, X, Y, Z = map(int, read().split())
X, Y = Y - 1, X - 1
Z -= 1
Fq.set_degree(N.bit_length() - 1)
nums = np.array(list(Fq.iter_all()), dtype=object)
latine_1, latine_2 = (nums[None, :, None] + nums[2:4][:, None, None] * nums[None, None, :]).astype(int)
latine_1 += (Z // N) - latine_1[X, Y]
latine_1 %= N
latine_2 += (Z % N) - latine_2[X, Y]
latine_2 %= N
magic_square = latine_1 * N + latine_2 + 1
print('\n'.join(' '.join(row) for row in magic_square.astype(str)))
maspy