結果
問題 | No.2542 Yokan for Two |
ユーザー | 👑 rin204 |
提出日時 | 2023-11-24 21:27:58 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 67 ms / 2,000 ms |
コード長 | 7,621 bytes |
コンパイル時間 | 228 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 67,968 KB |
最終ジャッジ日時 | 2024-09-26 08:51:45 |
合計ジャッジ時間 | 3,901 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 41 ms
53,376 KB |
testcase_01 | AC | 42 ms
53,632 KB |
testcase_02 | AC | 41 ms
53,376 KB |
testcase_03 | AC | 61 ms
65,024 KB |
testcase_04 | AC | 61 ms
65,408 KB |
testcase_05 | AC | 60 ms
65,280 KB |
testcase_06 | AC | 51 ms
61,952 KB |
testcase_07 | AC | 64 ms
66,688 KB |
testcase_08 | AC | 58 ms
64,256 KB |
testcase_09 | AC | 63 ms
66,560 KB |
testcase_10 | AC | 58 ms
65,408 KB |
testcase_11 | AC | 59 ms
65,536 KB |
testcase_12 | AC | 61 ms
65,536 KB |
testcase_13 | AC | 61 ms
64,640 KB |
testcase_14 | AC | 62 ms
66,176 KB |
testcase_15 | AC | 63 ms
66,176 KB |
testcase_16 | AC | 62 ms
66,048 KB |
testcase_17 | AC | 64 ms
65,792 KB |
testcase_18 | AC | 63 ms
66,432 KB |
testcase_19 | AC | 61 ms
65,536 KB |
testcase_20 | AC | 59 ms
65,792 KB |
testcase_21 | AC | 60 ms
65,664 KB |
testcase_22 | AC | 60 ms
65,536 KB |
testcase_23 | AC | 61 ms
66,048 KB |
testcase_24 | AC | 54 ms
62,720 KB |
testcase_25 | AC | 56 ms
63,616 KB |
testcase_26 | AC | 57 ms
64,256 KB |
testcase_27 | AC | 56 ms
64,256 KB |
testcase_28 | AC | 57 ms
64,384 KB |
testcase_29 | AC | 59 ms
65,536 KB |
testcase_30 | AC | 62 ms
65,664 KB |
testcase_31 | AC | 63 ms
67,840 KB |
testcase_32 | AC | 62 ms
66,048 KB |
testcase_33 | AC | 61 ms
65,792 KB |
testcase_34 | AC | 65 ms
66,304 KB |
testcase_35 | AC | 62 ms
66,048 KB |
testcase_36 | AC | 63 ms
66,304 KB |
testcase_37 | AC | 61 ms
66,304 KB |
testcase_38 | AC | 65 ms
66,432 KB |
testcase_39 | AC | 64 ms
66,560 KB |
testcase_40 | AC | 63 ms
66,560 KB |
testcase_41 | AC | 67 ms
67,968 KB |
testcase_42 | AC | 65 ms
67,840 KB |
testcase_43 | AC | 62 ms
66,432 KB |
ソースコード
def popcount32(x): x = x - ((x >> 1) & 0x55555555) x = (x & 0x33333333) + ((x >> 2) & 0x33333333) x = (x + (x >> 4)) & 0x0F0F0F0F x += x >> 8 x += x >> 16 return x & 0x0000003F def popcount64(x): x = (x & 0x5555555555555555) + ((x >> 1) & 0x5555555555555555) x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333) x = (x & 0x0F0F0F0F0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F0F0F0F0F) x = (x & 0x00FF00FF00FF00FF) + ((x >> 8) & 0x00FF00FF00FF00FF) x = (x & 0x0000FFFF0000FFFF) + ((x >> 16) & 0x0000FFFF0000FFFF) x = (x & 0x00000000FFFFFFFF) + ((x >> 32) & 0x00000000FFFFFFFF) return x class Bitset: def __init__(self, n: int) -> None: self.n = n self.m = (n + 62) // 63 self.A = [0] * self.m def __len__(self) -> int: return self.n @property def size(self) -> int: return self.n def __str__(self) -> str: S = [] for a in self.A: S.append(bin(a)[2:].zfill(63)[::-1]) S = "".join(S) return S[: self.n][::-1] def __getitem__(self, ind: int) -> int: i = ind // 63 j = ind - i * 63 return self.A[i] >> j & 1 def __setitem__(self, ind: int, k: int) -> None: i = ind // 63 j = ind - i * 63 if (self.A[i] >> j & 1) != k: self.A[i] ^= 1 << j else: pass def rev(self, ind: int) -> None: i = ind // 63 j = ind - i * 63 self.A[i] ^= 1 << j def count(self) -> int: ret = 0 for a in self.A: ret += popcount64(a) return ret def __sum__(self) -> int: return self.count() def resize(self, n: int) -> None: m = (n + 62) // 63 if m > self.m: self.A += [0] * (m - self.m) else: self.A = self.A[:m] j = n % 63 if j != 0: self.A[-1] &= (1 << j) - 1 else: pass self.n = n self.m = m def __and__(self, other: "Bitset") -> "Bitset": if self.n < other.n: n = self.n else: n = other.n ret = Bitset(n) for i, (a, b) in enumerate(zip(self.A, other.A)): ret.A[i] = a & b return ret def __iand__(self, other: "Bitset") -> "Bitset": if self.m < other.m: m = self.m else: m = other.m for i in range(m): self.A[i] &= other.A[i] for i in range(m, self.m): self.A[i] = 0 return self def __or__(self, other: "Bitset") -> "Bitset": if self.n > other.n: n = self.n else: n = other.n ret = Bitset(n) for i in range(ret.m): if i < self.m and i < other.m: ret.A[i] = self.A[i] | other.A[i] elif i < self.m: ret.A[i] = self.A[i] else: ret.A[i] = other.A[i] return ret def __ior__(self, other: "Bitset") -> "Bitset": if self.m < other.m: m = self.m else: m = other.m for i in range(m): self.A[i] |= other.A[i] if self.n < other.n: x = self.n % 63 if x != 0: mask = (1 << x) - 1 self.A[-1] &= mask else: pass return self def __xor__(self, other: "Bitset") -> "Bitset": if self.n > other.n: n = self.n else: n = other.n ret = Bitset(n) for i in range(ret.m): if i < self.m and i < other.m: ret.A[i] = self.A[i] ^ other.A[i] elif i < self.m: ret.A[i] = self.A[i] else: ret.A[i] = other.A[i] return ret def __ixor__(self, other: "Bitset") -> "Bitset": if self.m < other.m: m = self.m else: m = other.m for i in range(m): self.A[i] ^= other.A[i] if self.n < other.n: x = self.n % 63 if x != 0: mask = (1 << x) - 1 self.A[-1] &= mask else: pass return self def and_count(self, other: "Bitset") -> int: ret = 0 for a, b in zip(self.A, other.A): ret += popcount64(a & b) return ret def or_count(self, other: "Bitset") -> int: ret = 0 if self.m < other.m: m = self.m else: m = other.m for a, b in zip(self.A[:m], other.A[:m]): ret += popcount64(a | b) for a in self.A[m:]: ret += popcount64(a) for a in other.A[m:]: ret += popcount64(a) return ret def xor_count(self, other: "Bitset") -> int: ret = 0 if self.m < other.m: m = self.m else: m = other.m for a, b in zip(self.A[:m], other.A[:m]): ret += popcount64(a ^ b) for a in self.A[m:]: ret += popcount64(a) for a in other.A[m:]: ret += popcount64(a) return ret def __rshift__(self, k: int) -> "Bitset": ret = Bitset(self.n) x = k // 63 for i in range(x, self.m): ret.A[i - x] = self.A[i] k -= x * 63 if k != 0: mask = (1 << k) - 1 rk = 63 - k for i, a in enumerate(ret.A): if i != 0: ret.A[i - 1] |= (a & mask) << (rk) ret.A[i] = a >> k else: pass return ret def __irshift__(self, k: int) -> "Bitset": x = k // 63 for i in range(x, self.m): self.A[i - x] = self.A[i] for i in range(self.m - x, self.m): self.A[i] = 0 k -= x * 63 if k != 0: mask = (1 << k) - 1 rk = 63 - k for i, a in enumerate(self.A): if i != 0: self.A[i - 1] |= (a & mask) << (rk) self.A[i] = a >> k else: pass return self def __lshift__(self, k: int) -> "Bitset": ret = Bitset(self.n) x = k // 63 for i in range(x, self.m): ret.A[i] = self.A[i - x] k -= x * 63 if k != 0: rk = 63 - k mask = (1 << rk) - 1 for i in range(self.m - 1, -1, -1): ret.A[i] &= mask ret.A[i] <<= k if i != 0: ret.A[i] |= ret.A[i - 1] >> rk else: pass return ret def __ilshift__(self, k: int) -> "Bitset": x = k // 63 for i in range(self.m - 1, x - 1, -1): self.A[i] = self.A[i - x] for i in range(x - 1, -1, -1): self.A[i] = 0 k -= x * 63 if k != 0: rk = 63 - k mask = (1 << rk) - 1 for i in range(self.m - 1, -1, -1): self.A[i] &= mask self.A[i] <<= k if i != 0: self.A[i] |= self.A[i - 1] >> rk else: pass return self l, n = map(int, input().split()) X = list(map(int, input().split())) A = [] for i in range(n - 1): A.append(X[i + 1] - X[i]) bs = Bitset(l + 1) bs[0] = 1 for a in A: bs |= bs << a aa = X[0] bb = l - X[-1] ans = l for i in range(l): if bs[i]: a_ = aa + i b_ = l - a_ ans = min(ans, abs(a_ - b_)) print(ans)