0069:Drawing Lots II

問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0069

全部試した。


#include<iostream>
#include<algorithm>

using namespace std;

int d,a[31][12];

bool ok(int s,int g){
	for(int i=0;i<d;i++){
		if(a[i][s-1]==1)s--;
		else if(a[i][s]==1)s++;
	}
	if(s==g)return true;
	return false;
}

int main(void){

	int n,m,g;
	char in;
	
	while(cin >> n,n){
		
		fill(a[0],a[31],0);

		cin >> m >> g >> d;
		
		for(int i=0;i<d;i++){
			for(int j=1;j<n;j++){
				cin >>in;
				a[i][j]=in-'0';
			}
		}

		if(ok(m,g)){
			cout << 0 << endl;
			continue;
		}
		
		bool fg=false;
		int p,q;
		
		for(int i=0;i<d;i++){
			for(int j=1;j<n;j++){
				if(a[i][j]==0 && a[i][j-1]==0 && a[i][j+1]==0){
					a[i][j]=1;
					fg=ok(m,g);
					if(fg){
						p=i+1,q=j;
						break;	
					}
					a[i][j]=0;
				}
			}
			if(fg)break;
		}
		if(fg)cout << p << " " << q << endl;
		else cout << 1 << endl;
		
	}
	
return 0;
}