Submission #2071655
Source Code Expand
from collections import Counter
import sys
s = input()
N = len(s)
sc = Counter(s)
odds = [1 for x in sc if sc[x] % 2 == 1]
if len(odds) > 1:
print(-1)
sys.exit(0)
class BIT:
def __init__(self, size):
self.bit = [0] * (size+1)
def add(self, index, elem):
index += 1
while index < len(self.bit):
self.bit[index] += elem
index += index & -index
def get(self, index):
index += 1
ret = 0
while 0 < index:
ret += self.bit[index]
index -= index & -index
return ret
indices = [-1] * N
tb = {c: [None] * (sc[c]//2) for c in sc}
lens = {c: 0 for c in sc}
p = 0
for i in range(N):
c = s[i]
l = lens[c]
if 2 * (l+1) <= sc[c]:
indices[p] = i
tb[c][l] = p
lens[c] += 1
p += 1
elif 2 * (l+1) == sc[c] + 1:
indices[N//2] = i
lens[c] += 1
else:
indices[N-1-tb[c][sc[c]-l-1]] = i
lens[c] += 1
ans = 0
bit = BIT(N)
for i in indices:
bit.add(i, 1)
ans += bit.get(N-1) - bit.get(i)
print(ans)
Submission Info
| Submission Time | |
|---|---|
| Task | E - Papple Sort |
| User | kotarou |
| Language | PyPy3 (2.4.0) |
| Score | 800 |
| Code Size | 1142 Byte |
| Status | AC |
| Exec Time | 366 ms |
| Memory | 50252 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, 47.txt, s1.txt, s2.txt, s3.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01.txt | AC | 347 ms | 49996 KiB |
| 02.txt | AC | 337 ms | 49612 KiB |
| 03.txt | AC | 335 ms | 49612 KiB |
| 04.txt | AC | 337 ms | 49740 KiB |
| 05.txt | AC | 339 ms | 49612 KiB |
| 06.txt | AC | 342 ms | 49612 KiB |
| 07.txt | AC | 343 ms | 49996 KiB |
| 08.txt | AC | 350 ms | 49612 KiB |
| 09.txt | AC | 348 ms | 49612 KiB |
| 10.txt | AC | 366 ms | 49996 KiB |
| 11.txt | AC | 193 ms | 40048 KiB |
| 12.txt | AC | 194 ms | 40048 KiB |
| 13.txt | AC | 198 ms | 40048 KiB |
| 14.txt | AC | 192 ms | 40048 KiB |
| 15.txt | AC | 325 ms | 49116 KiB |
| 16.txt | AC | 327 ms | 49244 KiB |
| 17.txt | AC | 337 ms | 49868 KiB |
| 18.txt | AC | 344 ms | 49868 KiB |
| 19.txt | AC | 336 ms | 50252 KiB |
| 20.txt | AC | 189 ms | 40048 KiB |
| 21.txt | AC | 335 ms | 49996 KiB |
| 22.txt | AC | 335 ms | 49996 KiB |
| 23.txt | AC | 335 ms | 49868 KiB |
| 24.txt | AC | 190 ms | 40048 KiB |
| 25.txt | AC | 341 ms | 50252 KiB |
| 26.txt | AC | 331 ms | 49868 KiB |
| 27.txt | AC | 342 ms | 49868 KiB |
| 28.txt | AC | 333 ms | 50124 KiB |
| 29.txt | AC | 338 ms | 49868 KiB |
| 30.txt | AC | 191 ms | 40176 KiB |
| 31.txt | AC | 331 ms | 50252 KiB |
| 32.txt | AC | 191 ms | 40176 KiB |
| 33.txt | AC | 329 ms | 50124 KiB |
| 34.txt | AC | 188 ms | 40048 KiB |
| 35.txt | AC | 330 ms | 49868 KiB |
| 36.txt | AC | 189 ms | 40048 KiB |
| 37.txt | AC | 187 ms | 40048 KiB |
| 38.txt | AC | 184 ms | 40048 KiB |
| 39.txt | AC | 330 ms | 49868 KiB |
| 40.txt | AC | 188 ms | 40176 KiB |
| 41.txt | AC | 181 ms | 38256 KiB |
| 42.txt | AC | 177 ms | 38384 KiB |
| 43.txt | AC | 173 ms | 38256 KiB |
| 44.txt | AC | 177 ms | 38256 KiB |
| 45.txt | AC | 177 ms | 38256 KiB |
| 46.txt | AC | 178 ms | 38256 KiB |
| 47.txt | AC | 174 ms | 38256 KiB |
| s1.txt | AC | 180 ms | 38256 KiB |
| s2.txt | AC | 181 ms | 38256 KiB |
| s3.txt | AC | 176 ms | 38384 KiB |