제출 #1339826

#제출 시각아이디문제언어결과실행 시간메모리
1339826tudor_costinSuperpiece (EGOI22_superpiece)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
    string s;
    cin>>s;
    assert(s=="N");
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    int p=abs(a-c),q=abs(b-d);
    int l=(p+q+2)/3,r=1e9;
    int ans=r;
    while(l<=r)
    {
        int mid=(l+r)/2;
        int B=mid;
        pair<int,int> intervy={0,min(B,2*B-p)};
        pair<int,int> intervx={0,min(B,2*B-q)};
        if(intervy.first%2!=p%2) intervy.first++;
        if(intervy.second%2!=p%2) intervy.second--;
        if(intervx.first%2!=q%2) intervx.first++;
        if(intervx.second%2!=q%2) intervx.second--;
        bool ok=1;
        if(intervy.first>intervy.second) ok=0;
        if(intervx.first>intervx.second) ok=0;
        if(!ok)
        {
            l=mid+1;
            continue;
        }
        ///check possible cu x=0
        if(intervx.first==0)
        {
            ///cout<<ans<<' '<<mid<<' '<<B<<' '<<low<<' '<<mid<<' '<<intervx.first<<' '<<intervx.second<<'\n';
            if(p<=B && p%2==B%2 && q<=2*B && q%4==((2*B)%4))
            {
                ans=mid;
                r=mid-1;
                continue;
            }
            ///cout<<ans<<'\n';
        }
        ///check possible cu y=0
        if(intervy.first==0)
        {
            ///cout<<ans<<' '<<mid<<' '<<B<<' '<<low<<' '<<mid<<' '<<intervy.first<<' '<<intervy.second<<'\n';
            if(q<=B && q%2==B%2 && p<=2*B && p%4==((2*B)%4))
            {
                ans=mid;
                r=mid-1;
                continue;
            }
            ///cout<<ans<<'\n';
        }
        ///nu luam x=0 sau y=0
        if(intervx.first==0) intervx.first=2;
        if(intervy.first==0) intervy.first=2;
        if(intervy.first>intervy.second) ok=0;
        if(intervx.first>intervx.second) ok=0;
        ///cout<<mid<<' '<<intervx.first<<' '<<intervx.second<<'\n';
        int low=intervy.first+intervx.first,high=intervx.second+intervy.second;
        ///cout<<ans<<' '<<mid<<' '<<B<<' '<<low<<' '<<mid<<' '<<intervx.first<<' '<<intervx.second<<'\n';
        if(B<low || B>high) ok=0;
        if(ok)
        {
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
        ///cout<<ans<<'\n';
    }
    cout<<ans<<'\n';
}
signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...