Submission #1359270

#TimeUsernameProblemLanguageResultExecution timeMemory
1359270kokorooSuperpiece (EGOI22_superpiece)C++20
0 / 100
1 ms348 KiB
#include<bits/stdc++.h>
//#include<atcoder/all>

using namespace std;
//using namespace atcoder;
#define rep(i,n) for(ll i=0; i<n; i++)
#define rrep(i,n) for(ll i=n-1; i>=0; i--)
#define print(a) cout<<a<<endl
typedef long long ll;
#define yn(flg) if(flg){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}
#define YN(flg) if(flg){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}
#define so(a) sort(a.begin(),a.end())
#define mp make_pair
#define vi vector<int>
#define vl vector<ll>
#define vs vector<string>
#define pb push_back
#define a2i(a,s) (ll)(a-s)
#define i2a(s,a) (char)(s+a)
#define ssize(a) a.size()
typedef pair<int, int> Pii;
typedef pair<int, ll> Pil;
typedef pair<pair<ll,ll>,ll> P3;
typedef pair<pair<ll,ll>,pair<ll,ll>> P4;

typedef pair<ll, ll> Pll;
typedef pair<ll,Pll> Plll;
typedef pair<Pii, int> Piii;
const ll INF = 1000000000000000000;

template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;

}

ll MOD=1000000007;
vector<ll> tate={-2,-1,1,2,2,1,-1,-2};
vector<ll> yoko={1,2,2,1,-1,-2,-2,-1};
vector<ll> tate2={-1,-1,-1,0,0,1,1,1};
vector<ll> yoko2={-1,0,1,-1,1,-1,0,1};


int main(){
//入力

	cin.tie(0);
	ios::sync_with_stdio(0);

	ll t;
	cin>>t;

	rep(T,t){
		string s;
		cin>>s;
		ll a,b,c,d;
		cin>>a>>b>>c>>d;

		ll ans=2;


//		set<Pll> ST;
//		rep(i,8)ST.insert({tate[i],yoko[i]});
//
//		for(ll i=-2;i<=2;i++){
//			for(ll j=-2;j<=2;j++){
//				if(ST.find({i,j})!=ST.end())cout<<'#';
//				else cout<<'.';
//			}
//			cout<<endl;
//		}

		set<char> st;

		rep(i,s.size())st.insert(s[i]);

//		if(st.find('Q')!=st.end()){
//			ans=min(ans,max(abs(a-c),abs(b-d)));
//			if(a==c)ans=1;
//			if(b==d)ans=1;
//			if(abs((a+b)%2)==abs((c+d)%2)){
//					if(a-c==b-d)ans=1;
//					else if(a-c==d-b)ans=1;
//			}
//
//		}
//		if(st.find('R')!=st.end()){
//			if(a==c)ans=1;
//			if(b==d)ans=1;
//		}
//		if(st.find('B')!=st.end()){
//			if(abs((a+b)%2)==abs((c+d)%2)){
//				if(a-c==b-d)ans=1;
//				else if(a-c==d-b)ans=1;
//			}
//		}
//
		vector<vector<ll> > v{{0,3,2,3,2},{3,2,1,2,3},{2,1,4,3,2},{3,2,3,2,3},{2,3,2,3,4}};
		if(st.find('N')!=st.end()){
			ll X=abs(a-c),Y=abs(b-d);
			if(X+Y<=4){
				cout<<v[X][Y]<<endl;
				continue;
			}
			if((X+Y-4)%3==0){
				if(X>=(X+Y-4)/3&&Y>=(X+Y-4)/3){
					cout<<(X+Y-4)/3<<endl;
					continue;
				}
			}if((X+Y-2)%3==0){
				if(X>=(X+Y-2)/3&&Y>=(X+Y-2)/3){
					cout<<(X+Y-2)/3<<endl;
					continue;
				}
			}if((X+Y)%3==0){
				if(X>=(X+Y)/3&&Y>=(X+Y)/3){
					cout<<(X+Y)/3<<endl;
					continue;
				}
			}
//			if((Y+3)%2==(X+Y)%2&&(Y+3)/2>X)cout<<(Y+3)/2<<endl;
//			if((Y+3)%2!=(X+Y)%2&&(Y+3)/2-1>X)cout<<(Y+3)/2-1<<endl;
//			if((X+3)%2==(X+Y)%2&&(X+3)/2>Y)cout<<(X+3)/2<<endl;
//			if((X+3)%2!=(X+Y)%2&&(X+3)/2-1>Y)cout<<(X+3)/2-1<<endl;

		}
//		if(st.find('K')!=st.end()){
//			ans=min(ans,max(abs(a-c),abs(b-d)));
//
//			rep(i,8){
//				ll x=a+tate2[i],y=b+yoko2[i];
//				if(x==c&&y==d)ans=1;
//				if(x-c==y-d)ans=min(ans,(ll)2);
//				else if(x-c==d-y)ans=min(ans,(ll)2);
//				else ans=min(ans,(ll)3);
//
//			}
//		}
//		if(st.find('P')!=st.end()){
//			if(b==d&&a<c)ans=min(ans,c-a);
//			if(a+1==c&&b==d)ans=1;
//			if(a+1-c==b-d)ans=min(ans,(ll)2);
//			else if(a+1-c==d-b)ans=min(ans,(ll)2);
//			else ans=min(ans,(ll)3);
//
//		}
//		if(ans!=INF)cout<<ans<<endl;
//		else cout<<-1<<endl;
	}

	 return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...