結果
| 問題 |
No.2432 Flip and Move
|
| コンテスト | |
| ユーザー |
chro_96
|
| 提出日時 | 2023-08-19 00:00:58 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 73 ms / 2,000 ms |
| コード長 | 1,938 bytes |
| コンパイル時間 | 1,719 ms |
| コンパイル使用メモリ | 31,744 KB |
| 実行使用メモリ | 18,432 KB |
| 最終ジャッジ日時 | 2024-11-28 11:54:43 |
| 合計ジャッジ時間 | 4,481 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 36 |
ソースコード
#include <stdio.h>
int main () {
int h = 0;
int w = 0;
long long k = 0LL;
int res = 0;
int cnt = 0;
int flag[1000000][4] = {};
char ans[1000001] = "";
int st = 0;
int pos = 0;
int s = 0;
int t = 0;
res = scanf("%d", &h);
res = scanf("%d", &w);
res = scanf("%lld", &k);
while (((long long)cnt) < k && flag[pos][st] <= 0) {
cnt++;
flag[pos][st] = cnt;
if (st%2 == 0) {
pos += w;
if (pos/w >= h) {
pos -= w;
st ^= 1;
}
} else {
pos -= w;
if (pos < 0) {
pos += w;
st ^= 1;
}
}
if (st < 2) {
if (pos%w == w-1) {
st ^= 2;
} else {
pos++;
}
} else {
if (pos%w == 0) {
st ^= 2;
} else {
pos--;
}
}
}
if ((long long)cnt == k) {
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int f = 0;
for (int l = 0; l < 4; l++) {
if (flag[i*w+j][l] > 0) {
f ^= 1;
}
}
if (f == 0) {
ans[j] = '.';
} else {
ans[j] = '#';
}
}
ans[w] = '\0';
printf("%s\n", ans);
}
return 0;
}
s = flag[pos][st];
t = cnt+1;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int f = 0;
for (int l = 0; l < 4; l++) {
if (flag[i*w+j][l] >= s) {
long long tmp = k-((long long)(s-1));
if (flag[i*w+j][l]-s+1 <= tmp%((long long)(t-s))) {
tmp = 1LL+tmp/((long long)(t-s));
} else {
tmp /= ((long long)(t-s));
}
if (tmp%2LL == 1LL) {
f ^= 1;
}
} else if (flag[i*w+j][l] > 0) {
f ^= 1;
}
}
if (f == 0) {
ans[j] = '.';
} else {
ans[j] = '#';
}
}
ans[w] = '\0';
printf("%s\n", ans);
}
return 0;
}
chro_96