結果
| 問題 |
No.145 yukiover
|
| コンテスト | |
| ユーザー |
mkawa2
|
| 提出日時 | 2020-01-22 22:57:46 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 47 ms / 5,000 ms |
| コード長 | 1,907 bytes |
| コンパイル時間 | 96 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 11,264 KB |
| 最終ジャッジ日時 | 2024-07-16 04:06:19 |
| 合計ジャッジ時間 | 2,060 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 20 |
ソースコード
import sys
sys.setrecursionlimit(10 ** 6)
def II(): return int(sys.stdin.readline())
def SI(): return sys.stdin.readline()[:-1]
def main():
n = II()
s = SI()
ans = 0
# アルファベットを次のように分類して、個数を数える
# yより後(1文字で辞書順が後なので、すぐにansに加える)
# 0:y
# 1:uとyの間
# 2:u
# 3:kとuの間
# 4:k
# 5:iとkの間
# 6:i
# 7:iより前
cnt = [0] * 9
oy = ord("y")
ou = ord("u")
ok = ord("k")
oi = ord("i")
for c in s:
a = ord(c)
if a > oy:
ans += 1
continue
elif a == oy:
i = 0
elif a > ou:
i = 1
elif a == ou:
i = 2
elif a > ok:
i = 3
elif a == ok:
i = 4
elif a > oi:
i = 5
elif a == oi:
i = 6
else:
i = 7
cnt[i] += 1
# それぞれのパターンごとにyukiより辞書順が後ろのものを作っていく
# 2文字(y? ?はuより後)
w = min(cnt[0], cnt[1])
ans += w
for i in [0, 1]: cnt[i] -= w
# 3文字(yu? ?はkより後)
w = min(cnt[0], cnt[2], cnt[3])
ans += w
for i in [0, 2, 3]: cnt[i] -= w
# 4文字(yuk? ?はiより後)
w = min(cnt[0], cnt[2], cnt[4], cnt[5])
ans += w
for i in [0, 2, 4, 5]: cnt[i] -= w
# 5文字(yuki? ?はiより前)
w = min(cnt[0], cnt[2], cnt[4], cnt[6], cnt[7])
ans += w
for i in [0, 2, 4, 6, 7]: cnt[i] -= w
# yukii
w = min(cnt[0], cnt[2], cnt[4], cnt[6] // 2)
ans += w
for i in [0, 2, 4]: cnt[i] -= w
# yukk
w = min(cnt[0], cnt[2], cnt[4] // 2)
ans += w
for i in [0, 2]: cnt[i] -= w
# yuu
w = min(cnt[0], cnt[2] // 2)
ans += w
cnt[0] -= w
# yy
ans += cnt[0] // 2
print(ans)
main()
mkawa2