제출 #1329442

#제출 시각아이디문제언어결과실행 시간메모리
1329442Faisal_Saqib생물 실험 (IZhO13_expgorl)C++20
0 / 100
1 ms344 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <array>
#include <cmath>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef long double ld;
#define int ll
int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int k;
    cin>>k;
    string s;
    cin>>s;
    int n=s.size();
    int gx,gy,lx,ly;
    cin>>gx>>gy>>lx>>ly;
    gx-=lx;
    gy-=ly;
    int cx=0,cy=0;
    for(int i=0;i<n;i++)
    {
        // cout<<s[i]<<endl;
        switch(s[i])
        {
            case 'L':
                cx--;
                break;
            case 'R':
                cx++;
                break;
            case 'F':
                cy++;
                break;
            case 'B':
                cy--;
                break;
            default:;
        };
    }
    int mi=gx*gx + gy*gy;
    int mx=gx*gx+gy*gy;
    for(int i=0;i<n;i++)
    {
        switch(s[i])
        {
            case 'L':
                gx--;
                break;
            case 'R':
                gx++;
                break;
            case 'F':
                gy++;
                break;
            case 'B':
                gy--;
                break;
            default:;
        };
        // cout<<cx<<' '<<cy<<endl;
        // for(int m=0;m<=k;m++)
        // {
        //     int nx=gx+m*cx,ny=gy+m*cy;
        //     cout<<(nx*nx+ny*ny)<<' ';
        // }
        // cout<<endl;
        int l=-1,r=k-1;
        while(l+1<r)
        {
            int m=(l+r)/2;
            int nx=gx+m*cx,ny=gy+m*cy;
            int nx1=nx+cx,ny1=ny+cy;
            if((nx*nx)+(ny*ny) <= (nx1*nx1)+(ny1*ny1))
            {
                r=m;
            }
            else
            {
                l=m;
            }
        }
        int nx=gx+r*cx,ny=gy+r*cy;
        mi=min(mi,nx*nx + ny*ny);

        r=k-1; // we using some prefix
        nx=gx+r*cx,ny=gy+r*cy;
        mx=max(mx,nx*nx + ny*ny);
        r=0;
        nx=gx+r*cx,ny=gy+r*cy;
        mx=max(mx,nx*nx + ny*ny);
    }
    cout.precision(10);
    cout<<fixed<<sqrtl(mi)<<' '<<sqrtl(mx)<<endl;;
}
#Verdict Execution timeMemoryGrader output
Fetching results...