結果
問題 | No.2482 Sandglasses |
ユーザー |
![]() |
提出日時 | 2023-09-22 23:24:19 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 85 ms / 2,000 ms |
コード長 | 3,127 bytes |
コンパイル時間 | 3,979 ms |
コンパイル使用メモリ | 274,808 KB |
実行使用メモリ | 6,656 KB |
最終ジャッジ日時 | 2024-11-16 22:52:39 |
合計ジャッジ時間 | 9,595 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 25 |
ソースコード
#include <bits/stdc++.h>namespace nono {void naive() {int n, k, t;std::cin >> n >> k >> t;std::vector<char> a(n);std::vector<int> b(n);for (int i = 0; i < n; i++) std::cin >> a[i];for (int i = 0; i < n; i++) std::cin >> b[i];std::vector<bool> under(n);for (int i = 0; i < n; i++) {if (a[i] == 'B') {under[i] = true;}}std::map<std::vector<int>, int> mp;mp[b] = 0;for (int i = 0; i < t; i++) {{ // 砂移動パートfor (int j = 0; j < n; j++) {if (under[j]) {b[j]++;} else {b[j]--;}}}{ // ひっくり返しパートfor (int j = 0; j < n; j++) {if (b[j] == k) {under[j] = false;} else if (b[j] == 0) {under[j] = true;}}for (int j = 0; j < n; j++) {for (int l = 0; l < n; l++) {if (b[j] == b[l]) {under[j] = (under[j] ? false : true);under[l] = (under[l] ? false : true);}}}}{ // 出力パート}if (mp.contains(b)) {std::cerr << "already state!!!" << std::endl;std::cerr << "prev: " << mp[b] << ", new: " << i + 1 << std::endl;}mp[b] = i + 1;}for (int j = 0; j < n; j++) {std::cerr << b[j] << ' ';}std::cerr << std::endl;}void solve() {int n, k, t;std::cin >> n >> k >> t;std::vector<char> a(n);std::vector<int> b(n);for (int i = 0; i < n; i++) std::cin >> a[i];for (int i = 0; i < n; i++) std::cin >> b[i];std::vector<int> c(n);t %= 2 * k;for (int i = 0; i < n; i++) {int now = b[i];bool plus = (a[i] == 'B');int s = t;while (s > 0) {if (plus) {if (now + s >= k) {s -= k - now;now = k;} else {now += s;s -= s;}} else {if (now <= s) {s -= now;now = 0;} else {now -= s;s -= s;}}plus ^= true;}c[i] = now;}std::ranges::sort(c);std::vector<int> index(n);std::iota(index.begin(), index.end(), 0);std::ranges::sort(index, [&](int lhs, int rhs) { return b[lhs] < b[rhs]; });std::vector<int> ans(n);for (int i = 0; i < n; i++) {ans[index[i]] = c[i];}for (int i = 0; i < n; i++) {std::cout << ans[i] << (i + 1 < n ? ' ' : '\n');}}} // namespace nonoint main() {std::cin.tie(0)->sync_with_stdio(false);std::cout << std::fixed << std::setprecision(15);int t = 1;while (t--) nono::solve();}