結果
| 問題 | No.459 C-VS for yukicoder |
| コンテスト | |
| ユーザー |
くれちー
|
| 提出日時 | 2016-12-10 22:11:44 |
| 言語 | C90(gcc15) (gcc 15.2.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,983 bytes |
| 記録 | |
| コンパイル時間 | 417 ms |
| コンパイル使用メモリ | 41,788 KB |
| 最終ジャッジ日時 | 2026-02-23 23:36:10 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | TLE * 1 -- * 2 |
| other | -- * 58 |
ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int getrand(int min, int max) {
static int f = 1;
if (f) {
srand((unsigned int)time(NULL));
f = 0;
}
return min + (int)(rand() * (max - min + 1.0) / (1.0 + RAND_MAX));
}
int sum(int *d, int size) {
int i, s = 0;
for (i = 0; i < size; i++) s += d[i];
return s;
}
int sum_(int *d, int size) {
int i, s = 0;
for (i = 0; i < size; i++)
if (d[i] != -1) s += d[i];
return s;
}
void copy(int *from, int *to, int size) {
int i;
for (i = 0; i < size; i++) to[i] = from[i];
return;
}
int check(int list[][10000], int n, int w) {
int i;
for (i = 0; i < n; i++) {
if (sum(list[i], w) == -1 * (w - 3)) return 0;
}
return 1;
}
int main() {
int h, w, n, c, i, j, k;
static char s[10000];
static int state[10000] = {};
static int ctate[10000] = {};
static int clist[30000][10000] = {};
scanf("%d %d %d", &h, &w, &n);
for (i = 0; i < h; i++) {
scanf("%s", s);
for (j = 0; j < w; j++) {
if (s[j] == '#') state[j]++;
}
}
for (i = 0; i < n; i++) {
scanf("%d", &c);
for (j = c; j < c + 3; j++) ctate[j]++;
for (j = 0; j < c; j++) clist[i][j] = -1;
for (j = c + 3; j < w; j++) clist[i][j] = -1;
}
for (i = 0; i < w; i++) {
if (ctate[i] == 1) {
for (j = 0; j < n; j++) {
if (clist[j][i] != -1) {
clist[j][i] = state[i];
break;
}
}
}
}
while (!check(clist, n, w)) {
for (i = 0; i < w; i++) {
int tmp[30000];
for (j = 0; j < n; j++) {
if (clist[j][i] == -1) {
tmp[j] = -1;
continue;
}
tmp[j] = getrand(0, 3);
if (sum_(tmp, n) > state[i]) j--;
}
if (sum_(tmp, n) != state[i]) i--;
else for (j = 0; j < n; j++) clist[j][i] = tmp[j];
}
}
for (i = 0; i < n; i++) {
int t = 0;
while (clist[i][t] == -1) t++;
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
if (clist[i][t + k] > 0) {
printf("#");
clist[i][t + k]--;
}
else printf(".");
}
printf("\n");
}
}
return 0;
}
くれちー