Submission #1364137

#TimeUsernameProblemLanguageResultExecution timeMemory
1364137yyc000123Superpiece (EGOI22_superpiece)C++20
61 / 100
2 ms352 KiB
#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int T = 1005 ;
const int ABCD = 1e8+5 ;
const int INF = 1e9 ;
int t , A , B , C , D ;
string s ;
set<pair<int,int>> dn={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}} , dk={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}} , dp={{1,0}} ;

int disb(int x , int y , int flag){
    if(!flag || ((abs(x)+abs(y))&1)) return INF ;
    return 2-(abs(x)==abs(y)) ;
}

int disn(int x , int y , int flag){
    if(!flag) return INF ;
    return INF ; //
}

int disk(int x , int y , int flag){
    if(!flag) return INF ;
    return max(abs(x),abs(y)) ;
}

int disp(int x , int y , int flag){
    if(!flag) return INF ;
    if(x>=0 && y==0) return x ;
    else return INF ;
}

void solve(){
    cin >> s >> A >> B >> C >> D ;
    int x = C-A , y = D-B , q = 0 , r = 0 , b = 0 , n = 0 , k = 0 , p = 0 , ans = INF ;
    for(int i=0 ; i<s.size() ; i++) q|=(s[i]=='Q') , r|=(s[i]=='R') , b|=(s[i]=='B') , n|=(s[i]=='N') , k|=(s[i]=='K') , p|=(s[i]=='P') ;
    if(q && (x==0 || y==0 || abs(x)==abs(y))) ans = 1 ;
    else if(r && (x==0 || y==0)) ans = 1 ;
    else if(b && abs(x)==abs(y)) ans = 1 ;
    else if(n && dn.find({x,y})!=dn.end()) ans = 1 ;
    else if(k && dk.find({x,y})!=dk.end()) ans = 1 ;
    else if(p && dp.find({x,y})!=dp.end()) ans = 1 ;
    else if(q || r) ans = 2 ;
    if(ans!=INF){ cout << ans << '\n' ; return ; }
    ans = min({disb(x,y,b),disn(x,y,n),disk(x,y,k),disp(x,y,p)}) ;
    if(n) for(auto it:dn) ans = min({ans,disb(x-it.F,y-it.S,b)+1,disk(x-it.F,y-it.S,k)+1,disp(x-it.F,y-it.S,p)+1}) ;
    if(k) for(auto it:dk) ans = min({ans,disb(x-it.F,y-it.S,b)+1,disn(x-it.F,y-it.S,n)+1,disp(x-it.F,y-it.S,p)+1}) ;
    if(p) for(auto it:dp) ans = min({ans,disb(x-it.F,y-it.S,b)+1,disn(x-it.F,y-it.S,n)+1,disk(x-it.F,y-it.S,k)+1}) ;
    if(ans==INF) ans = -1 ;
    cout << ans << '\n' ;
}

int main(){
    cin >> t ;
    while(t--) solve() ;
    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...