結果
問題 | No.2549 Paint Eggs |
ユーザー |
|
提出日時 | 2023-11-20 19:53:53 |
言語 | D (dmd 2.109.1) |
結果 |
AC
|
実行時間 | 132 ms / 2,000 ms |
コード長 | 1,136 bytes |
コンパイル時間 | 2,307 ms |
コンパイル使用メモリ | 174,728 KB |
実行使用メモリ | 23,888 KB |
最終ジャッジ日時 | 2024-09-26 06:41:59 |
合計ジャッジ時間 | 7,892 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 45 |
ソースコード
import std;void main () {int N, M, K; readln.read(N, M, K);int[] C = readln.split.to!(int[]);C[] -= 1;int[] A = readln.split.to!(int[]);solve(N, M, K, C, A);}void solve (int N, int M, int K, int[] C, int[] A) {/* スライドしていけば良さそう */int[int] mp;// 最初の一回foreach (i; 0..K) mp[C[i]]++;long ans = long.max;foreach (key, val; mp) {ans = min(ans, 1L*(K-val)*A[key]);}int left = 0, right = K;while (right < N) {// [left, right)を保持している// leftを除去してrightを加入させるmp[C[left]]--;mp[C[right]]++;ans = min(ans, 1L*(K-mp[C[right]])*A[C[right]]);left++, right++;//dbg//writeln("[", left, ", ", right, ") ", mp);}// ハマった。単に全部塗り替えるのが最適な場合があるforeach (a; A) {ans = min(ans, 1L*K*a);}writeln(ans);}void read(T...)(string S, ref T args) {auto buf = S.split;foreach (i, ref arg; args) {arg = buf[i].to!(typeof(arg));}}