結果
| 問題 |
No.459 C-VS for yukicoder
|
| コンテスト | |
| ユーザー |
くれちー
|
| 提出日時 | 2016-12-10 23:45:27 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,938 bytes |
| コンパイル時間 | 751 ms |
| コンパイル使用メモリ | 69,120 KB |
| 実行使用メモリ | 821,412 KB |
| 最終ジャッジ日時 | 2024-11-29 02:18:40 |
| 合計ジャッジ時間 | 187,839 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | TLE * 3 |
| other | WA * 2 TLE * 53 MLE * 3 |
ソースコード
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
typedef vector<int> vi;
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_(vi d) {
int i, s = 0;
for (i = 0; i < d.size(); i++)
if (d[i] != -1) s += d[i];
return s;
}
int check(vector<vi> list, vi list2, int n, int w) {
int s, i, j;
for (i = 0; i < n; i++) {
s = 0;
for (j = 0; j < w; j++) s += list[i][w];
if (s != list2[i]) return 0;
}
return 1;
}
int main() {
int h, w, n, c, i, j, k;
cin >> h >> w >> n;
string s;
vi state(w), ctate(w);
vector<vi> clist(n, vi(w)), clist_(n, vi(w));
for (i = 0; i < h; i++) {
cin >> s;
for (j = 0; j < w; j++) {
if (s[j] == '#') state[j]++;
}
}
for (i = 0; i < n; i++) {
cin >> 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_, state, n, w)) {
copy(clist.begin(), clist.end(), clist_.begin());
for (i = 0; i < w; i++) {
vi tmp(n);
for (j = 0; j < n; j++) {
if (clist_[j][i] == -1) {
tmp[j] = -1;
continue;
}
tmp[j] = getrand(0, 3);
if (sum_(tmp) > state[i]) j--;
}
if (sum_(tmp) != state[i]) i--;
else for (j = 0; j < n; j++) clist_[j][i] = tmp[j];
}
}
copy(clist_.begin(), clist_.end(), clist.begin());
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) {
cout << "#";
clist[i][t + k]--;
}
else cout << ".";
}
cout << "\n";
}
}
return 0;
}
くれちー