結果
| 問題 |
No.1935 Water Simulation
|
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 2022-05-13 23:46:31 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,606 bytes |
| コンパイル時間 | 596 ms |
| コンパイル使用メモリ | 64,768 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-22 04:37:49 |
| 合計ジャッジ時間 | 1,610 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
/* -*- coding: utf-8 -*-
*
* 1935.cc: No.1935 Water Simulation - yukicoder
*/
#include<cstdio>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
/* constant */
const int K = 4;
/* typedef */
typedef unsigned int ui;
typedef ui vec[K + 1];
typedef long long ll;
typedef vector<ui> vui;
typedef map<ui,int> mui;
/* global variables */
/* subroutines */
ui v2bits(vec v) {
ll bits = 0;
for (int i = 0; i <= K; i++)
bits |= (ll)v[i] << (i * 7);
return (ui)(bits & 0xffffffffU);
}
void bits2v(ui bits, vec v) {
for (int i = 0; i <= K; i++)
v[i] = (bits >> (i * 7)) & 0x7f;
}
void printv(vec v) {
for (int i = 0; i <= K; i++) printf("%u ", v[i]);
}
/* main */
int main() {
vec vs;
for (int i = 0; i < K; i++) scanf("%u", vs + i);
ll n;
scanf("%lld", &n);
vec xs;
fill(xs, xs + K + 1, 0);
xs[0] = vs[0];
ui b0 = v2bits(xs);
vui bs;
mui cache;
int l = 0, r = 0;
bs.push_back(b0);
cache[b0] = 0;
//printv(xs), printf(": %d\n", l);
for (;;) {
int i = l % K;
int j = (i + 1) % K;
ui d = min(xs[i], vs[j] - xs[j]);
xs[i] -= d, xs[j] += d;
xs[K] = (xs[K] + 1) % K;
l++;
//printv(xs), printf(": %d\n", l);
ui bits = v2bits(xs);
mui::iterator mit = cache.find(bits);
if (mit != cache.end()) {
r = mit->second;
break;
}
bs.push_back(bits);
cache[bits] = l;
}
//printf("r=%d, l=%d\n", r, l);
ui b = (n < r) ? bs[n] : bs[r + (n - r) % (l - r)];
bits2v(b, xs);
for (int i = 0; i < K; i++)
printf("%u%c", xs[i], (i + 1 < K) ? ' ' : '\n');
return 0;
}
tnakao0123