結果
問題 | 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; } } }