高端的烹饪往往仅需要朴素的食材,简单的题目就要用复杂的方法解决
#include<bits/stdc++.h>
using namespace std;
const int N=210,zh=10000000;
struct mirror{
int x,y;
char c;
}q[N];
int n,a,b;
void rotate(char &s){
if(s=='/'){
s='\\';
}
else{
s='/';
}
}
bool dfs(int qx,int qy,int fx,int cis){
if(cis>3*n){
return false;
}
int t=-1;
if(fx==4){
int zuix=zh;
for(int i=1;i<=n+1;i++){
if(q[i].y==qy){
if(q[i].x<zuix&&q[i].x>qx){
t=i;
zuix=q[i].x;
}
}
}
if(t==-1){
return false;
}
else{
if(q[t].x==a&&q[t].y==b){
return true;
}
if(q[t].c=='/'){
return dfs(q[t].x,q[t].y,1,cis+1);
}
else{
return dfs(q[t].x,q[t].y,2,cis+1);
}
}
}
else if(fx==3){
int zuid=-zh;
for(int i=1;i<=n+1;i++){
if(q[i].y==qy){
if(q[i].x>zuid&&q[i].x<qx){
t=i;
zuid=q[i].x;
}
}
}
if(t==-1){
return false;
}
else{
if(q[t].x==a&&q[t].y==b){
return true;
}
if(q[t].c=='/'){
return dfs(q[t].x,q[t].y,2,cis+1);
}
else{
return dfs(q[t].x,q[t].y,1,cis+1);
}
}
}
else if(fx==2){
int zuid=-zh;
for(int i=1;i<=n+1;i++){
if(q[i].x==qx){
if(q[i].y>zuid&&q[i].y<qy){
t=i;
zuid=q[i].y;
}
}
}
if(t==-1){
return false;
}
else{
if(q[t].x==a&&q[t].y==b){
return true;
}
if(q[t].c=='/'){
return dfs(q[t].x,q[t].y,3,cis+1);
}
else{
return dfs(q[t].x,q[t].y,4,cis+1);
}
}
}
else{
int zuix=zh;
for(int i=1;i<=n+1;i++){
if(q[i].x==qx){
if(q[i].y<zuix&&q[i].y>qy){
t=i;
zuix=q[i].y;
}
}
}
if(t==-1){
return false;
}
else{
if(q[t].x==a&&q[t].y==b){
return true;
}
if(q[t].c=='/'){
return dfs(q[t].x,q[t].y,4,cis+1);
}
else{
return dfs(q[t].x,q[t].y,3,cis+1);
}
}
}
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>q[i].x>>q[i].y>>q[i].c;
}
q[n+1].x=a;
q[n+1].y=b;
if(dfs(0,0,4,0)){
cout<<"0";
}
else{
bool issuc=false;
for(int i=1;i<=n;i++){
rotate(q[i].c);
if(dfs(0,0,4,0)){
cout<<i;
issuc=true;
break;
}
rotate(q[i].c);
}
if(!issuc){
cout<<"-1";
}
}
return 0;
}