結果
問題 |
No.935 う し た ぷ に き あ く ん 笑 ビ - ム
|
ユーザー |
![]() |
提出日時 | 2019-12-03 14:12:13 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 7 ms / 2,000 ms |
コード長 | 1,084 bytes |
コンパイル時間 | 1,645 ms |
コンパイル使用メモリ | 169,808 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-14 06:02:31 |
合計ジャッジ時間 | 3,111 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 58 |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int N; string S; cin >> N >> S; ll A[N]; for (int i = 0; i < N; i++) { cin >> A[i]; } int Q; cin >> Q; ll K[Q]; for (int i = 0; i < Q; i++) { cin >> K[i]; } ll b[N + 1]{}; int c[N + 1]{}; for (int i = 0; i < N; i++) { b[i + 1] = b[i] + A[i]; if (S[i] == 'E') { c[i + 1] = c[i] + 1; } else { c[i + 1] = c[i]; } } vector<ll> d(N + 1); fill(d.begin(), d.end(), LLONG_MAX); d[0] = 0; for (int i = 0; i < N; i++) { for (int j = i + 1; j <= N; j++) { int t = c[j] - c[i]; d[t] = min(d[t], b[j] - b[i]); } } for (int i = 0; i < Q; i++) { int l = -1; int r = N + 1; while (r - l > 1) { int m = (l + r) / 2; if (d[m] <= K[i]) { l = m; } else { r = m; } } cout << l << "\n"; } return 0; }