結果
| 問題 |
No.1935 Water Simulation
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-05-13 22:36:33 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,061 bytes |
| コンパイル時間 | 3,151 ms |
| コンパイル使用メモリ | 167,812 KB |
| 最終ジャッジ日時 | 2025-01-29 07:16:54 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 25 WA * 4 |
ソースコード
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <utility>
#include <map>
#include <set>
#include <queue>
#include <iomanip>
#include <cstring>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
typedef long long ll;
#define rep(i,n) for (int i = 0; i < int(n);i++)
int main(){
int a,b = 0,c = 0,d = 0,v1,v2,v3,v4;
ll n;
cin >> v1 >> v2 >> v3 >> v4 >> n;
map<ll,ll> mp;
vector<ll> val;
a = v1;
ll count = 0;
mp[1000000000LL*a + 1000000LL*b + 1000LL*c + d] = count;
count++;
val.push_back(1000000000LL*a + 1000000LL*b + 1000LL*c + d);
ll offset = 0;
ll s = 0;
ll loopsize = 0;
int trun = 0;
a = v1;
while(1){
if (trun == 0){
int diff = v2-b;
b += min(a,v2-b);
a -= min(a,diff);
}
else if (trun == 1){
int diff = v3-c;
c += min(b,diff);
b -= min(b,diff);
}
else if (trun == 2){
int diff = v4-d;
d += min(c,diff);
c -= min(c,diff);
}
else{
int diff = v1-a;
a += min(d,diff);
d -= min(d,diff);
}
ll hash = 1000000000LL*a + 1000000LL*b + 1000LL*c + d;
if (mp.count(hash)){
loopsize = count-mp[hash];
offset = mp[hash];
s = hash;
break;
}
mp[hash] = count;
val.push_back(hash);
count++;
trun++;
trun%=4;
}
//for (auto y:val){
// cout << y << " ";
//}
//cout << endl;
if (n <= offset){
vector<ll> ans(4);
ll z = val[n];
for (int i = 0; i < 4;i++){
ans[3-i] = z%1000;
z/=1000;
}
for (int i = 0; i < 4;i++){
if (i == 0) cout << ans[i];
else cout << " " << ans[i];
}
cout << endl;
}
else{
n -= offset;
n%=loopsize;
vector<ll> ans(4);
ll z = val[n+offset];
for (int i = 0; i < 4;i++){
ans[3-i] = z%1000;
z/=1000;
}
for (int i = 0; i < 4;i++){
if (i == 0) cout << ans[i];
else cout << " " << ans[i];
}
cout << endl;
}
return 0;
}