結果
| 問題 |
No.459 C-VS for yukicoder
|
| コンテスト | |
| ユーザー |
くれちー
|
| 提出日時 | 2016-12-10 22:11:44 |
| 言語 | C90 (gcc 12.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,983 bytes |
| コンパイル時間 | 348 ms |
| コンパイル使用メモリ | 25,088 KB |
| 実行使用メモリ | 1,208,184 KB |
| 最終ジャッジ日時 | 2024-11-29 02:13:31 |
| 合計ジャッジ時間 | 133,182 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 12 WA * 5 TLE * 40 MLE * 1 |
コンパイルメッセージ
main.c: In function ‘main’:
main.c:48:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
48 | scanf("%d %d %d", &h, &w, &n);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.c:51:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
51 | scanf("%s", s);
| ^~~~~~~~~~~~~~
main.c:58:17: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
58 | scanf("%d", &c);
| ^~~~~~~~~~~~~~~
ソースコード
#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;
}
くれちー