結果
問題 |
No.145 yukiover
|
ユーザー |
![]() |
提出日時 | 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()