結果
問題 |
No.459 C-VS for yukicoder
|
ユーザー |
![]() |
提出日時 | 2016-12-10 02:55:23 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,474 bytes |
コンパイル時間 | 2,714 ms |
コンパイル使用メモリ | 178,428 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-11-28 22:48:54 |
合計ジャッジ時間 | 10,048 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 WA * 39 |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> P; struct Block { int id, pos; int num[3]; Block(int id, int pos) : id(id), pos(pos) { for(int i = 0; i < 3; i++) { num[i] = 0; } } }; bool comp1(Block b1, Block b2) { return b1.pos < b2.pos; } bool comp2(Block b1, Block b2) { return b1.id < b2.id; } int num[10000]; vector<P> p[10000]; int main() { cin.tie(0); ios::sync_with_stdio(false); int H, W, N; cin >> H >> W >> N; for(int i = 0; i < H; i++) { for(int j = 0; j < W; j++) { char c; cin >> c; if(c == '#') num[j]++; } } vector<Block> block; for(int i = 0; i < N; i++) { int pos; cin >> pos; block.push_back(Block(i, pos)); for(int j = 0; j < 3; j++) { p[pos + j].push_back(P(i, j)); } } sort(block.begin(), block.end(), comp1); for(auto& b : block) { bool flag = false; for(int i = 0; i < 3; i++) { if(num[b.pos + i] > 0) { num[b.pos + i]--; b.num[i]++; flag = true; break; } } assert(flag); } for(int j = 0; j < W; j++) { if(num[j] == 0) continue; for(auto v : p[j]) { int idx = v.first, col = v.second; while(block[idx].num[col] < 3 && num[j] > 0) { block[idx].num[col]++; num[j]--; } } } sort(block.begin(), block.end(), comp2); for(auto b : block) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if(i >= 3 - b.num[j]) cout << '#'; else cout << '.'; } cout << endl; } } }