結果
問題 | No.13 囲みたい! |
ユーザー | myanta |
提出日時 | 2017-04-30 23:26:36 |
言語 | C++11 (gcc 11.4.0) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,536 bytes |
コンパイル時間 | 1,314 ms |
コンパイル使用メモリ | 45,552 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-14 00:03:32 |
合計ジャッジ時間 | 3,353 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | RE | - |
testcase_01 | RE | - |
testcase_02 | RE | - |
testcase_03 | RE | - |
testcase_04 | AC | 3 ms
6,944 KB |
testcase_05 | RE | - |
testcase_06 | RE | - |
testcase_07 | RE | - |
testcase_08 | RE | - |
testcase_09 | RE | - |
testcase_10 | RE | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | RE | - |
コンパイルメッセージ
main.cpp: In function ‘int remove_connection(int, int)’: main.cpp:68:1: warning: no return statement in function returning non-void [-Wreturn-type] 68 | } | ^ main.cpp: In function ‘int main()’: main.cpp:112:38: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 112 | scanf("%d", &f[y][x]); | ~~~~~^~~~~~~~~~~~~~~~
ソースコード
#include<cstdio> #include<vector> using namespace std; int w, h; vector<vector<int> > f, c; int calc_connection(void) { int vx[]={ 1, 0,-1, 0}; int vy[]={ 0,-1, 0, 1}; int x, y, n, i, ret=0; for(y=1;y<=h;y++) { for(x=1;x<=w;x++) { if(f[y][x]==0) continue; c[y][x]=0; n=f[y][x]; for(i=0;i<4;i++) { if(n==f[y+vy[i]][x+vx[i]]) { c[y][x]++; ret=1; } } if(c[y][x]==0) f[y][x]=0; } } return ret; } int remove_connection(int x, int y) { int vx[]={ 1, 0,-1, 0}; int vy[]={ 0,-1, 0, 1}; int i, n, nx, ny; n=f[y][x]; for(;;) { c[y][x]--; if(c[y][x]<=0) { f[y][x]=0; } for(i=0;i<4;i++) { nx=x+vx[i]; ny=y+vy[i]; if(f[ny][nx]>0 && c[ny][nx]<2) { break; } } if(i>=4) break; x=nx; y=ny; } } int solve(void) { int x, y, is_removed=1, ret=0; for(;is_removed;) { ret=calc_connection(); is_removed=0; for(y=1;y<=h;y++) { for(x=1;x<=w;x++) { if(c[y][x]==1 && f[y][x]>0) { remove_connection(x, y); is_removed=1; } } } } return ret; } int main(void) { int i, x, y; while(scanf("%d%d", &w, &h)==2) { f.clear(); f.resize(h+2); for(i=0;i<f.size();i++) { f[i].resize(w+2); } c=f; for(y=1;y<=h;y++) { for(x=1;x<=w;x++) { scanf("%d", &f[y][x]); } } printf("%s\n", solve()?"possible":"impossible"); /* for(y=1;y<=h;y++) { for(x=1;x<=w;x++) { printf("%2d[%2d] ", f[y][x], c[y][x]); } printf("\n"); } printf("\n"); */ } return 0; }