結果
問題 | No.459 C-VS for yukicoder |
ユーザー |
![]() |
提出日時 | 2016-12-10 03:02:27 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 124 ms / 2,000 ms |
コード長 | 1,541 bytes |
コンパイル時間 | 1,865 ms |
コンパイル使用メモリ | 177,952 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-11-28 23:01:09 |
合計ジャッジ時間 | 5,376 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 58 |
ソースコード
#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));}sort(block.begin(), block.end(), comp1);for(int i = 0; i < N; i++) {for(int j = 0; j < 3; j++) {p[block[i].pos + j].push_back(P(i, j));}}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]--;}}assert(num[j] == 0);}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;}}}