結果

問題 No.1935 Water Simulation
ユーザー 遭難者
提出日時 2022-05-16 10:11:31
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
MLE  
実行時間 -
コード長 4,827 bytes
コンパイル時間 6,053 ms
コンパイル使用メモリ 164,480 KB
最終ジャッジ日時 2025-01-29 08:29:59
ジャッジサーバーID
(参考情報)
judge2 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 19 MLE * 10
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <stack>
#include <numeric>
#include <algorithm>
using namespace std;
using ll = long long;
//#include <atcoder/all>
// using namespace atcoder;
// using mint = modint;
#define rep(i, n) for (int i = 0; i < n; i++)
#define endl '\n'
#define print(n) cout << (n) << endl
#define ALL(a) (a).begin(), (a).end()
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int v1, v2, v3, v4;
cin >> v1 >> v2 >> v3 >> v4;
int vv = (v1 + 1) * (v1 + 1), vvv = vv * (v1 + 1);
vector<vector<int>> a1(60, vector<int>(vvv));
vector<vector<int>> a2(60, vector<int>(vvv));
vector<vector<int>> a3(60, vector<int>(vvv));
vector<vector<int>> a4(60, vector<int>(vvv));
for (int i = 0; i <= v1; i++)
{
for (int j = 0; j <= v2; j++)
{
int s1 = i + j;
if (s1 > v1)
break;
for (int k = 0; k <= v3; k++)
{
int s2 = s1 + k;
if (s2 > v1)
break;
int key = vv * i + v1 * j + k;
int l = v1 - s2;
int ii = i, jj = j, kk = k, ll = l;
jj += ii;
ii = 0;
if (jj > v2)
{
ii = jj - v2;
jj = v2;
}
kk += jj;
jj = 0;
if (kk > v3)
{
jj = kk - v3;
kk = v3;
}
ll += kk;
kk = 0;
if (ll > v4)
{
kk = ll - v4;
ll = v4;
}
ii += ll;
ll = 0;
if (ii > v1)
{
ll = ii - v1;
ii = v1;
}
a1[0][key] = ii;
a2[0][key] = jj;
a3[0][key] = kk;
a4[0][key] = ll;
}
}
}
for (int idx = 1; idx < 60; idx++)
{
for (int i = 0; i <= v1; i++)
{
for (int j = 0; j <= v2; j++)
{
int s1 = i + j;
if (s1 > v1)
break;
for (int k = 0; k <= v3; k++)
{
int s2 = s1 + k;
if (s2 > v1)
break;
// int l = v1 - s2;
int key1 = vv * i + v1 * j + k;
int ii = a1[idx - 1][key1];
int jj = a2[idx - 1][key1];
int kk = a3[idx - 1][key1];
// int ll = a4[idx - 1][key1];
int key2 = vv * ii + v1 * jj + kk;
int iii = a1[idx - 1][key2];
int jjj = a2[idx - 1][key2];
int kkk = a3[idx - 1][key2];
int lll = a4[idx - 1][key2];
a1[idx][key1] = iii;
a2[idx][key1] = jjj;
a3[idx][key1] = kkk;
a4[idx][key1] = lll;
}
}
}
}
ll k_;
cin >> k_;
ll k1 = k_ >> 2, k2 = k_ & 3;
int i = v1, j = 0, k = 0, l = 0;
for (int idx = 0; k1 != 0; idx++)
{
if ((k1 & 1) == 1)
{
int key = vv * i + v1 * j + k;
int ii = a1[idx][key];
int jj = a2[idx][key];
int kk = a3[idx][key];
int ll = a4[idx][key];
i = ii;
j = jj;
k = kk;
l = ll;
}
k1 >>= 1;
}
if (k2 == 0)
{
cout << i << " " << j << " " << k << " " << l << endl;
return 0;
}
j += i;
i = 0;
if (j > v2)
{
i = j - v2;
j = v2;
}
if (--k2 == 0)
{
cout << i << " " << j << " " << k << " " << l << endl;
return 0;
}
k += j;
j = 0;
if (k > v3)
{
j = k - v3;
k = v3;
}
if (--k2 == 0)
{
cout << i << " " << j << " " << k << " " << l << endl;
return 0;
}
l += k;
k = 0;
if (l > v4)
{
k = l - v4;
l = v4;
}
if (--k2 == 0)
{
cout << i << " " << j << " " << k << " " << l << endl;
return 0;
}
i += l;
l = 0;
if (i > v1)
{
l = i - v1;
i = v1;
}
if (--k2 == 0)
{
cout << i << " " << j << " " << k << " " << l << endl;
return 0;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0