Please sign in first.
Submission #7871114
Source Code Expand
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
sys.setrecursionlimit(10 ** 7)
MOD = 998244353
N = int(readline())
X = read().rstrip().decode('utf-8')
def F(d):
"""
・dは奇数
・d個のブロックに分けられるものの個数
"""
L = N//d
arr = [int(X[i:i+L],2) for i in range(0,N,L)]
cnt = arr[0] # 最初の桁が下回るもの
x = arr[0] # 最初の桁がちょうどx。満たすか確認する。
flip_x = ((1<<L)-1)^x
bl = True
for i,y in enumerate(arr):
if i&1:
if y > flip_x:
break
elif y == flip_x:
continue
else:
bl = False
break
if y > x:
break
elif y == x:
continue
else:
bl = False
break
return cnt + bl
# 奇数の約数を取得
div = set(x for x in range(1,1000) if N%x == 0)
div |= set(N//x for x in div)
div = sorted(d for d in div if d&1)
cnt = [F(d) for d in div]
# 包除を雑にやる
D = len(div)
for n in range(D-1,-1,-1):
for m,d in enumerate(div[:n]):
if div[n]%d == 0:
cnt[m] -= cnt[n]
answer = sum((N//x)*y for x,y in zip(div,cnt))*2
answer %= MOD
print(answer)
Submission Info
| Submission Time | |
|---|---|
| Task | C - Division by Two with Something |
| User | maspy |
| Language | Python (3.4.3) |
| Score | 800 |
| Code Size | 1383 Byte |
| Status | AC |
| Exec Time | 191 ms |
| Memory | 6212 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 800 / 800 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | s1.txt, s2.txt, s3.txt |
| All | 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, s1.txt, s2.txt, s3.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01.txt | AC | 64 ms | 4312 KiB |
| 02.txt | AC | 21 ms | 3508 KiB |
| 03.txt | AC | 64 ms | 4876 KiB |
| 04.txt | AC | 171 ms | 5844 KiB |
| 05.txt | AC | 95 ms | 5912 KiB |
| 06.txt | AC | 106 ms | 5668 KiB |
| 07.txt | AC | 71 ms | 5036 KiB |
| 08.txt | AC | 54 ms | 3996 KiB |
| 09.txt | AC | 75 ms | 5164 KiB |
| 10.txt | AC | 126 ms | 4904 KiB |
| 11.txt | AC | 74 ms | 4304 KiB |
| 12.txt | AC | 21 ms | 3508 KiB |
| 13.txt | AC | 64 ms | 4876 KiB |
| 14.txt | AC | 173 ms | 6212 KiB |
| 15.txt | AC | 97 ms | 5528 KiB |
| 16.txt | AC | 108 ms | 5412 KiB |
| 17.txt | AC | 72 ms | 5036 KiB |
| 18.txt | AC | 55 ms | 3872 KiB |
| 19.txt | AC | 74 ms | 4976 KiB |
| 20.txt | AC | 139 ms | 4772 KiB |
| 21.txt | AC | 65 ms | 4304 KiB |
| 22.txt | AC | 21 ms | 3508 KiB |
| 23.txt | AC | 66 ms | 4876 KiB |
| 24.txt | AC | 191 ms | 6212 KiB |
| 25.txt | AC | 99 ms | 5528 KiB |
| 26.txt | AC | 112 ms | 5412 KiB |
| 27.txt | AC | 74 ms | 5036 KiB |
| 28.txt | AC | 54 ms | 3996 KiB |
| 29.txt | AC | 75 ms | 5100 KiB |
| 30.txt | AC | 169 ms | 4772 KiB |
| 31.txt | AC | 64 ms | 4304 KiB |
| 32.txt | AC | 21 ms | 3508 KiB |
| 33.txt | AC | 65 ms | 4876 KiB |
| 34.txt | AC | 175 ms | 6212 KiB |
| 35.txt | AC | 134 ms | 5528 KiB |
| 36.txt | AC | 108 ms | 5412 KiB |
| 37.txt | AC | 76 ms | 5036 KiB |
| 38.txt | AC | 60 ms | 4204 KiB |
| 39.txt | AC | 77 ms | 4976 KiB |
| 40.txt | AC | 167 ms | 5244 KiB |
| 41.txt | AC | 63 ms | 3548 KiB |
| 42.txt | AC | 21 ms | 3508 KiB |
| 43.txt | AC | 17 ms | 3064 KiB |
| 44.txt | AC | 17 ms | 3064 KiB |
| 45.txt | AC | 17 ms | 3064 KiB |
| 46.txt | AC | 17 ms | 3064 KiB |
| s1.txt | AC | 17 ms | 3064 KiB |
| s2.txt | AC | 17 ms | 3064 KiB |
| s3.txt | AC | 17 ms | 3064 KiB |