随便造的数据都过去了,查不出错,请大佬帮帮我(若为脑残问题请轻喷)
#include<cstdio>
#include<bitset>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
#include<iostream>
#define int long long
using namespace std;
inline int read()
{
int x=0,y=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-')
y=-1;
c=getchar();
}
while(c<='9'&&c>='0')
{
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x*y;
}
int mnx,mny,mxx,mxy,go[505];
int x[5],y[5],wy;//0:N 1:E 2:S 3:W
string a;
inline int pd(char a,char b)
{
if(a=='F'&&b=='L')
return 1;
if(a=='F'&&b=='R')
return 2;
if(a=='R'&&b=='L')
return 3;
return 4;
}
inline void gx(int i)
{
mnx=min(mnx,x[i]);
mxx=max(mxx,x[i]);
mny=min(mny,y[i]);
mxy=max(mxy,y[i]);
}
inline void ck(void)
{
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
if(i!=j)
if(x[i]==x[j]&&y[i]==y[j])
{
printf("%d\n",-1);
exit(0);
}
}
signed main()
{
// freopen("bi.txt","w",stdout);
go['F']=0,go['B']=1,go['R']=2,go['L']=3,go['P']=4;
x[1]=1,y[1]=1;
x[2]=1,y[2]=2;
x[3]=2,y[3]=1;
x[4]=2,y[4]=2;
mnx=mny=1;
mxx=mxy=2;
int T=read();
// printf("\n");
// for(int i=1;i<=10;i++,printf("\n"))
// for(int j=1;j<=10;j++)
// {
// bool npt=false;
// for(int k=1;k<=4;k++)
// if(x[k]+5==i&&y[k]+5==j)
// {
// printf("%d",k);
// npt=true;
// }
// if(!npt)
// printf(" ");
// printf(" ");
// }
while(T--)
{
cin>>a;
int ft=pd(a[0],a[1]),hw=go[a[2]];
if(hw==4)
{
for(int i=1;i<=4;i++)
if(i!=ft)
{
int tx=y[ft]-y[i],ty=x[ft]-x[i];
x[i]=x[ft]-tx;
y[i]=y[ft]+ty;
gx(i);
}
wy=(wy+1)%4;
}
else
{
switch(hw)
{
case 0:
switch(wy)
{
case 0:x[ft]-=1;break;
case 1:y[ft]+=1;break;
case 2:x[ft]+=1;break;
case 3:y[ft]-=1;break;
}
break;
case 1:
switch(wy)
{
case 0:x[ft]+=1;break;
case 1:y[ft]-=1;break;
case 2:x[ft]-=1;break;
case 3:y[ft]+=1;break;
}
break;
case 2:
switch(wy)
{
case 0:y[ft]+=1;break;
case 1:x[ft]-=1;break;
case 2:y[ft]-=1;break;
case 3:x[ft]+=1;break;
}
break;
case 3:
switch(wy)
{
case 0:y[ft]-=1;break;
case 1:x[ft]+=1;break;
case 2:y[ft]+=1;break;
case 3:x[ft]-=1;break;
}
break;
}
gx(ft);
}
ck();
// printf("\n");
// for(int i=1;i<=10;i++,printf("\n"))
// for(int j=1;j<=10;j++)
// {
// bool npt=false;
// for(int k=1;k<=4;k++)
// if(x[k]+5==i&&y[k]+5==j)
// {
// printf("%d",k);
// npt=true;
// }
// if(!npt)
// printf(" ");
// printf(" ");
// }
}
printf("%lld\n",(mxx-mnx+1)*(mxy-mny+1));
}
/*
6
FRF
FRP
FLP
RRP
RLP
RRP
*/