結果
| 問題 |
No.1935 Water Simulation
|
| コンテスト | |
| ユーザー |
shinchan
|
| 提出日時 | 2022-05-13 21:49:15 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,595 bytes |
| コンパイル時間 | 2,357 ms |
| コンパイル使用メモリ | 209,156 KB |
| 最終ジャッジ日時 | 2025-01-29 06:55:31 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 1 TLE * 28 |
ソースコード
#include <bits/stdc++.h>
#define be(v) (v).begin(),(v).end()
#define pb(q) push_back(q)
#define rep(i, n) for(int i=0;i<n;i++)
#define all(i, v) for(auto& i : v)
typedef long long ll;
using namespace std;
const ll mod=1000000007, INF=(1LL<<60);
#define doublecout(a) cout<<fixed<<setprecision(10)<<a<<endl;
ll hen(vector<ll> a) {
return ((a[0] * 101 + a[1]) *101 + a[2]) *101 + a[3];
}
int main() {
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
ll v[4], n;
rep(i, 4) cin >> v[i];
cin >> n;
if(n <= 10000) {
vector<ll> h(4, 0);
h[0] = v[0];
ll id = 0;
while(n--) {
// rep(i, 4) cout << h[i] << " ";
// cout << endl;
ll nx = (id + 1) % 4;
ll num1 = h[id];
ll num2 = v[nx] - h[nx];
ll num = min(num1, num2);
h[id] -= num;
h[nx] += num;
id++;
id %= 4;
}
rep(i, 4) cout << h[i] << " ";
cout << endl;
return 0;
}
ll min_id = 0, num = 10000;
rep(i, 4) {
if(v[i] < num) {
min_id = i;
num = v[i];
}
}
vector<ll> h(4, 0);
h[0] = v[0];
ll id = 0;
rep(i, min_id) {
n--;
ll nx = (id + 1) % 4;
ll num1 = h[id];
ll num2 = v[nx] - h[nx];
ll num = min(num1, num2);
h[id] -= num;
h[nx] += num;
id++;
id %= 4;
}
set<ll> seen;
map<ll, ll> mp;
while(n >= 4) {
if(seen.count(hen(h))) {
break;
}
seen.insert(hen(h));
mp[hen(h)] = n;
rep(i, 4) {
ll nx = (id + 1) % 4;
ll num1 = h[id];
ll num2 = v[nx] - h[nx];
ll num = min(num1, num2);
h[id] -= num;
h[nx] += num;
id++;
id %= 4;
}
n -= 4;
}
if(n <= 3) {
while(n--) {
ll nx = (id + 1) % 4;
ll num1 = h[id];
ll num2 = v[nx] - h[nx];
ll num = min(num1, num2);
h[id] -= num;
h[nx] += num;
id++;
id %= 4;
}
rep(i, 4) cout << h[i] << " ";
cout << endl;
return 0;
}
n %= mp[hen(h)];
while(n--) {
ll nx = (id + 1) % 4;
ll num1 = h[id];
ll num2 = v[nx] - h[nx];
ll num = min(num1, num2);
h[id] -= num;
h[nx] += num;
id++;
id %= 4;
}
rep(i, 4) cout << h[i] << " ";
cout << endl;
return 0;
}
shinchan