結果
問題 | No.1935 Water Simulation |
ユーザー |
|
提出日時 | 2022-05-13 21:59:04 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 904 bytes |
コンパイル時間 | 4,455 ms |
コンパイル使用メモリ | 240,024 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-22 04:34:29 |
合計ジャッジ時間 | 4,862 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using vi = vector<int>; using vvi = vector<vector<int>>; using pii = pair<int, int>; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define repr(i, n) for (int i = (int)(n - 1); i >= 0; --i) using u = pair<vi, int>; int main() { vi v(4); rep(i, 4) cin >> v[i]; ll n; cin >> n; map<u, int> mp; vi w(4, 0); w[0] = v[0]; int k = 0; vvi ret; while (!mp.count(u(w, k & 3))) { ret.push_back(w); mp[u(w, k & 3)] = k; int i = k & 3; int j = (i + 1) & 3; int m = min(w[i], v[j] - w[j]); w[i] -= m; w[j] += m; k++; } if (n >= k) { int l = mp[u(w, k & 3)]; n = (n - l) % (k - l) + l; } rep(i, 4) cout << ret[n][i] << (i < 3 ? ' ' : '\n'); return 0; }