| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这道题槽点颇多,但有一点确定,o后面一定不拐弯,+后面一定接上拐弯的|或者-,代码如下//
// main.cpp
// 1048
//
// Created by zhangchenyi on 6/1/23.
//
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int bottom,ri;
int invalid(char str[200][200],int row,int col){
if(str[row][col]=='o') return 1;
else if(str[row][col]=='+') return 2;
else if(str[row][col]=='|') return 3;
else if(str[row][col]=='-') return 4;
else if(str[row][col]=='?') return 5;
else if(str[row][col]=='>') return 6;
else if(str[row][col]==')') return 7;
else if(str[row][col]==':') return 8;
else if(str[row][col]=='\\') return 9;
else if(str[row][col]=='/') return 10;
else if(str[row][col]<='Z'&&str[row][col]>='A') return 11;
else return 0;
}
char prec;
void shrink(char str[200][200],char data[200],int &row,int &col,int &dir){
if(row>=1&&str[row][col]=='|'&&dir!=1){
while(row>=1&&str[row][col]=='|'&&dir!=1) row--;
dir=2;
}
else if(str[row][col]=='|'&&dir!=2){
while(str[row][col]=='|'&&dir!=2) row++;
dir=1;
}
else if(col>=1&&str[row][col]=='-'&&dir!=3){
while(col>=1&&str[row][col]=='-'&&dir!=3) col--;
dir=4;
}
else if(str[row][col]=='-'&&dir!=4){
while(str[row][col]=='-'&&dir!=4) col++;
dir=3;
}
}
int turn(char str[200][200],int row,int col){
//if(str[row][col]>='A'&&str[row][col]<='Z') return 6;
//else if(str[row][col]=='o') return 12;
//else if(str[row][col]==':') return 24;
//else if(str[row][col]=='?') return 18;
//else if(str[row][col]=='\\') return 30;
//else if(str[row][col]=='/') return 36;
if(str[row][col]=='|') return 2;
else if(str[row][col]=='-') return 3;
else return 5;
}
int fun(char str[200][200],char data[200],int row,int col,int dir){
if(row<0||col<0||!invalid(str,row,col)) return 0;
shrink(str,data,row,col,dir);
char c=str[row][col];
if(c>='A'&&c<='Z'){
prec='a';
//cout<<c<<"="<<data[c-'A']-'0'<<endl;
return data[c-'A']-'0';
}
else if(c=='?'){
prec='?';
//cout<<"?:"<<endl;
return fun(str,data,row-1,col,2)||fun(str,data,row+1,col,1)||
fun(str,data,row,col-1,4)||fun(str,data,row,col+1,3);
}
else if(c==')'){
prec=')';
//cout<<"):"<<row<<" "<<col<<endl;
int a=fun(str,data,row+1,col-3,4),b=fun(str,data,row-1,col-3,4);
//cout<<a<<" && "<<b<<"="<<(a&&b)<<endl;
return a&&b;
}
else if(c=='>'){
prec='>';
//cout<<">:"<<row<<" "<<col<<endl;
int a=fun(str,data,row+1,col-3,4),b=fun(str,data,row-1,col-3,4);
//cout<<a<<" || "<<b<<"="<<(a||b)<<endl;
return a||b;
}
else if(c=='+'){
prec='L';
//cout<<"+:"<<row<<" "<<col<<endl;
if(dir==4){
if(turn(str,row+1,col)%2==0) return fun(str,data,row+1,col,1);
else return fun(str,data,row-1,col,2);
}
else if(dir==3){
if(turn(str,row+1,col)%2==0) return fun(str,data,row+1,col,1);
else return fun(str,data,row-1,col,2);
}
else if(dir==2){
if(turn(str,row,col+1)%3==0) return fun(str,data,row,col+1,3);
else return fun(str,data,row,col-1,4);
}
else if(dir==1){
if(turn(str,row,col+1)%3==0) return fun(str,data,row,col+1,3);
else return fun(str,data,row,col-1,4);
}
else while(1);
}
else if(c=='o'){
prec='o';
//cout<<"o:"<<row<<" "<<col<<endl;
if(dir==4)
return !fun(str,data,row,col-1,4);
else if(dir==3)
return !fun(str,data,row,col+1,3);
else if(dir==2)
return !fun(str,data,row-1,col,2);
else if(dir==1)
return !fun(str,data,row+1,col,1);
else while(1);
}
else {
//cout<<"error:"<<row<<" "<<col<<endl;
if(prec=='L') while(1);
return 0;
}
}
int sol(){
int cnt=0,f=0,stx=0,sty=0;
char str[200][200];
memset(str,0,sizeof(str));
for(;;cnt++){
for(int j=0;j<200;j++){
str[cnt][j]=getchar();
if(str[cnt][j]==EOF) return EOF;
if(str[cnt][j]=='?') {stx=cnt;sty=j;}
if(str[cnt][j]=='\n') break;
else if(str[cnt][j]=='*') f=1;
}
if(f) break;
}
//for(int i=0;i<cnt;i++) cout<<str[i];
//cout<<stx<<" "<<sty<<endl;
char data[200];
while(1){
cin>>data;
if(!strcmp(data,"*")) break;
//cout<<data<<endl;
cout<<fun(str,data,stx,sty,-1)<<endl;
}
cin.ignore();
return 1;
}
int main(int argc, const char * argv[]) {
while(sol()!=EOF) {cout<<endl;}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator