Submission #1363936

#TimeUsernameProblemLanguageResultExecution timeMemory
1363936yyc000123Superpiece (EGOI22_superpiece)C++20
55 / 100
2 ms344 KiB
#include<bits/stdc++.h>
using namespace std ;
const int T = 1005 ;
const int ABCD = 1e8+5 ;
int t , a , b , c , d ;
string s ;

bool Q(){ return a==c || b==d || abs(a-c)==abs(b-d) ; }
bool R(){ return a==c || b==d ; }
bool B(){ return abs(a-c)==abs(b-d) ; }
bool N(){ return min(abs(a-c),abs(b-d))==1 && max(abs(a-c),abs(b-d))==2 ; }
bool K(){ return max(abs(a-c),abs(b-d))<=1 ; }
bool P(){ return c==a+1 && b==d ; }

int main(){
    cin >> t ;
    while(t--){
        cin >> s >> a >> b >> c >> d ;
        bool flag1 = false , flag2 = false ;
        int b1 = 0 , n = 0 , k = 0 , p = 0 ;
        for(int i=0 ; i<s.size() ; i++){
            if(s[i]=='Q') flag1 |= Q() , flag2 = true ;
            else if(s[i]=='R') flag1 |= R() , flag2 = true ;
            else if(s[i]=='B') flag1 |= B() , b1 = 1 ;
            else if(s[i]=='N') flag1 |= N() , n = 1 ;
            else if(s[i]=='K') flag1 |= K() , k = 1 ;
            else flag1 |= P() , p = 1 ;
        }
        if(flag1) cout << "1\n" ;
        else if(flag2) cout << "2\n" ;
        else if(b1 && n+k+p==0){
            if((abs(a-c)+abs(b-d))&1) cout << "-1\n" ;
            else cout << "2\n" ;
        }
        else if(n+k+p==1 && p){
            if(b1 && abs(a-c)+abs(b-d)==1) cout << "2\n" ;
            else if(b1) cout << "3\n" ; 
            else if(c>a && b==d) cout << c-a << '\n' ;
            else cout << "-1\n" ;
        }
        else if(!b1 && ((n+k+p==1 && k) || (n+k+p==2 && !n))) cout << max(abs(a-c),abs(b-d)) << '\n' ;
        else if(!b1 && ((n+k+p==1 && n) || (n+k+p==2 && !k))){
            a = abs(a-c) , b = abs(b-d) ;
            if((a+b)%3==0) cout << (a+b)/3 << '\n' ;
            else cout << (a+b)/3+1 << '\n' ; // guess
        }
        else{
            ;
        }
    }
    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...