PKU 3561 Pseudographical recognizer
http://poj.org/problem?id=3561
画像データ的なものが文字列として与えられるので、その中にある線(縦線、横線、斜め線)が一本だけなのかを判定するというような問題。
泥臭いのは嫌です。
取り敢えずswitch caseは回避。
string in[10]; bool vis[10][10]; main(){ int test; cin>>test; map<char,PI> dir; dir['/']=mp(-1,1); dir['\\']=mp(-1,-1); dir['|']=mp(1,0); dir['-']=mp(0,1); while(test--){ int line=0; int n,m; cin>>n>>m; rep(i,n)cin>>in[i]; memset(vis,0,sizeof(vis)); rep(i,n){ rep(j,m){ if(vis[i][j] || in[i][j]=='.')continue; line++; int cx=i,cy=j; while(0<=cx && cx<n && 0<=cy && cy<m && in[cx][cy]==in[i][j]){ vis[cx][cy]=true; cx+=dir[in[i][j]].F; cy+=dir[in[i][j]].S; } cx=i,cy=j; while(0<=cx && cx<n && 0<=cy && cy<m && in[cx][cy]==in[i][j]){ vis[cx][cy]=true; cx-=dir[in[i][j]].F; cy-=dir[in[i][j]].S; } } } if(line==1)cout<<"CORRECT"<<endl; else cout<<"INCORRECT"<<endl; } }