結果
問題 | No.145 yukiover |
ユーザー | rpy3cpp |
提出日時 | 2015-06-12 02:40:56 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 36 ms / 5,000 ms |
コード長 | 3,028 bytes |
コンパイル時間 | 305 ms |
コンパイル使用メモリ | 13,056 KB |
実行使用メモリ | 11,392 KB |
最終ジャッジ日時 | 2024-07-06 15:48:17 |
合計ジャッジ時間 | 2,131 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 26 ms
11,008 KB |
testcase_01 | AC | 27 ms
11,008 KB |
testcase_02 | AC | 26 ms
11,008 KB |
testcase_03 | AC | 26 ms
11,136 KB |
testcase_04 | AC | 26 ms
11,008 KB |
testcase_05 | AC | 26 ms
11,136 KB |
testcase_06 | AC | 27 ms
11,136 KB |
testcase_07 | AC | 27 ms
11,008 KB |
testcase_08 | AC | 27 ms
11,008 KB |
testcase_09 | AC | 26 ms
11,008 KB |
testcase_10 | AC | 27 ms
11,008 KB |
testcase_11 | AC | 36 ms
11,264 KB |
testcase_12 | AC | 35 ms
11,264 KB |
testcase_13 | AC | 34 ms
11,264 KB |
testcase_14 | AC | 35 ms
11,264 KB |
testcase_15 | AC | 34 ms
11,264 KB |
testcase_16 | AC | 33 ms
11,392 KB |
testcase_17 | AC | 34 ms
11,264 KB |
testcase_18 | AC | 34 ms
11,264 KB |
testcase_19 | AC | 34 ms
11,392 KB |
testcase_20 | AC | 34 ms
11,392 KB |
testcase_21 | AC | 34 ms
11,264 KB |
testcase_22 | AC | 34 ms
11,392 KB |
testcase_23 | AC | 36 ms
11,264 KB |
ソースコード
from collections import Counter def read_data(): N = int(input()) S = input() return N, S def solve(N, S): '''a b c d e f g h [i] j [k] l m n o p q r s t [u] v w x [y] z yuki より辞書順で大きい文字列は、 z で始まるもの y で始まり、2文字目がvwxyのいずれか(yをここで使うのが良いのかどうかは悩む。) yu で始まり、3文字目がlmnopqrstuのいずれか yuk で始まり、4文字目がjk のいずれか yuki で始まり、5文字目がabcdefghi のいずれか greedy に、上から順に作っていけばよいのか? z と yv は確定させてもよさそう。 残りについては、yukiover, yukii, yukj, yukk, yul, yuu, yy の順に作っていく。 ''' c = Counter(S) z = c['z'] y = c['y'] vwx = c['v'] + c['w'] + c['x'] u = c['u'] l2t = sum(c[ch] for ch in 'lmnopqrst') k = c['k'] j = c['j'] i = c['i'] a2h = sum(c[ch] for ch in 'abcdefgh') # z を切り出す counts = z # yv, yw, yx を切り出す if y <= vwx: return counts + y y -= vwx counts += vwx return counts + solve_yukiover(y, u, l2t, k, j, i, a2h) def solve_yukiover(y, u, l2t, k, j, i, a2h): yukiover = min(y, u, k, i, a2h) y -= yukiover u -= yukiover k -= yukiover i -= yukiover a2h -= yukiover if y == 0: return yukiover if u == 0: return yukiover + y // 2 if k == 0: return yukiover + solve_yul(y, u, l2t) if i == 0: return yukiover + solve_yukj(y, u, l2t, k, j) if a2h == 0: return yukiover + solve_yukii(y, u, l2t, k, j, i) def solve_yukii(y, u, l2t, k, j, i): yukii = min(y, u, k, i//2) y -= yukii u -= yukii k -= yukii i -= yukii * 2 if y == 0: return yukii if u == 0: return yukii + y // 2 if k == 0: return yukii + solve_yul(y, u, l2t) else: return yukii + solve_yukj(y, u, l2t, k, j) def solve_yukj(y, u, l2t, k, j): yukj = min(y, u, k, j) y -= yukj u -= yukj k -= yukj j -= yukj if y == 0: return yukj if u == 0: return yukj + y // 2 if k == 0: return yukj + solve_yul(y, u, l2t) if j == 0: return yukj + solve_yukk(y, u, l2t, k) def solve_yukk(y, u, l2t, k): yukk = min(y, u, k//2) y -= yukk u -= yukk k -= yukk * 2 if y == 0: return yukk if u == 0: return yukk + y // 2 else: return yukk + solve_yul(y, u, l2t) def solve_yul(y, u, l2t): yul = min(y, u, l2t) y -= yul u -= yul l2t -= yul if y == 0: return yul if u == 0: return yul + y // 2 if l2t == 0: return yul + solve_yuu(y, u) def solve_yuu(y, u): yuu = min(y, u // 2) y -= yuu u -= yuu * 2 if y == 0: return yuu else: return yuu + y // 2 if __name__ == '__main__': N, S = read_data() print(solve(N, S))