結果
| 問題 |
No.2482 Sandglasses
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-09-22 22:44:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 77 ms / 2,000 ms |
| コード長 | 1,291 bytes |
| コンパイル時間 | 1,881 ms |
| コンパイル使用メモリ | 205,724 KB |
| 最終ジャッジ日時 | 2025-02-17 00:57:13 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0); cout.tie(0);
ios::sync_with_stdio(false);
int N, K, T;
cin >> N >> K >> T;
vector<char> a(N);
for(int i = 0; i < N; i++) {
cin >> a[i];
}
vector<int> b(N);
for(int i = 0; i < N; i++) {
cin >> b[i];
}
// 2K 秒目にリセットされる
// A の初期値が隣同士のものだけが作用する
T %= (2 * K);
vector<int> v;
for(int i = 0; i < N; i++) {
bool mode = (a[i] == 'A');
int now = b[i];
int S = 0;
while(S < T) {
if(mode) {
if(now + S <= T) {
S += now;
now = 0;
mode = false;
} else {
v.emplace_back(now + S - T);
S = T;
}
} else {
if((K - now) + S <= T) {
S += (K - now);
now = K;
mode = true;
} else {
v.emplace_back(now + T - S);
S = T;
}
}
}
}
sort(v.begin(), v.end());
vector<pair<int, int>> pr(N);
for(int i = 0; i < N; i++) {
pr[i] = make_pair(b[i], i);
}
sort(pr.begin(), pr.end());
vector<int> ans(N);
for(int i = 0; i < N; i++) {
ans[pr[i].second] = v[i];
}
for(int i = 0; i < N; i++) {
cout << ans[i] << " \n"[i == N - 1];
}
return 0;
}