제출 #339378

#제출 시각아이디문제언어결과실행 시간메모리
339378amunduzbaevExperiments with Gorlum (IZhO13_expgorl)C++14
0 / 100
2 ms364 KiB
/** made by amunduzbaev **/ #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> using namespace __gnu_pbds; using namespace __gnu_cxx; using namespace std; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vll vector<ll> #define vii vector<int> #define vpii vector<pii> #define vpll vector<pll> #define cnt(a)__builtin_popcount(a) template<class tmp> bool umin(tmp& a, const tmp b) {return a > b? a = b, true:false;} template<class tmp> bool umax(tmp& a, const tmp b) {return a < b? a = b, true:false;} typedef tree<pii,null_type,less<pii>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; const int N = 1e7+5; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); ll n, m, k, ans, a[N]; ll gx, gy, lx, ly; string s; void solve(){ cin>>k>>s; cin>>lx>>ly; cin>>gx>>gy; ll nx = gx, ny = gy, ex = gx, ey = gy, sx = gx, sy = gy, wx = gx, wy = gy; ll nmx = gx, nmy = gy, emx = gx, emy = gy, smx = gx, smy = gy, wmx = gx, wmy = gy; ll disx = 0, disy = 0; ll endx = gx, endy = gy; ld maxdis = (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly))); ld mindis = (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly))); for(ll i=0;i<sz(s);i++){ if(s[i] == 'L') endx--; else if(s[i] == 'R') endx++; else if(s[i] == 'F') endy++; else if(s[i] == 'B') endy--; else continue; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); if(endy > ny) nx = endx, ny = endy; else if((ld)sqrt(((nx - lx) * (nx - lx)) + ((ny - ly) * (ny - ly))) < (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) nx = endx, ny = endy; else if((ld)sqrt(((nmx - lx) * (nmx - lx)) + ((nmy - ly) * (nmy - ly))) > (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) nmx = endx, nmy = endy; if(endy < sy) sx = endx, sy = endy; else if((ld)sqrt(((sx - lx) * (sx - lx)) + ((sy - ly) * (sy - ly))) < (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) sx = endx, sy = endy; else if((ld)sqrt(((smx - lx) * (smx - lx)) + ((smy - ly) * (smy - ly))) > (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) smx = endx, smy = endy; if(endx > ex) ex = endx, ey = endy; else if((ld)sqrt(((ex - lx) * (ex - lx)) + ((ey - ly) * (ey - ly))) < (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) ex = endx, ey = endy; else if((ld)sqrt(((emx - lx) * (emx - lx)) + ((emy - ly) * (emy - ly))) > (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) emx = endx, emy = endy; if(endx < wx) wx = endx, wy = endy; else if((ld)sqrt(((wx - lx) * (wx - lx)) + ((wy - ly) * (wy - ly))) < (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) nx = endx, ny = endy; else if((ld)sqrt(((wmx - lx) * (wmx - lx)) + ((wmy - ly) * (wmy - ly))) > (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))) wmx = endx, wmy = endy; } disx = endx - gx, disy = endy - gy; nx = nx - endx, ny = ny - endy; sx = sx - endx, sy = sy - endy; ex = ex - endx, ey = ey - endy; wx = wx - endx, wy = wy - endy; nmx = nmx - endx, nmy = nmy - endy; smx = smx - endx, smy = smy - endy; emx = emx - endx, emy = emy - endy; wmx = wmx - endx, wmy = wmy - endy; for(ll j=1;j<k;j++){ endx += disx, endy += disy; // NNNNNNNNNNNNNNNNNNNNNNNNNNNNNN endx += nx, endy += ny; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= nx, endy -= ny; endx += nmx, endy += nmy; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= nmx, endy -= nmy; // SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS endx += sx, endy += sy; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= sx, endy -= sy; endx += smx, endy += smy; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= smx, endy -= smy; // EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE endx += ex, endy += ey; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= ex, endy -= ey; endx += emx, endy += emy; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= emx, endy -= emy; // WWWWWWWWWWWWWWWWWWWWWWWWWWWWW endx += wx, endy += wy; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= wx, endy -= wy; endx += wmx, endy += wmy; umax(maxdis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); umin(mindis, (ld)sqrt(((endx - lx) * (endx - lx)) + ((endy - ly) * (endy - ly)))); endx -= wmx, endy -= wmy; } cout<<fixed<<setprecision(20)<<mindis<<" "; cout<<fixed<<setprecision(20)<<maxdis<<"\n"; return; } /* 2 RFRBBL 0 0 1 1 */ int main(){ fastios int t = 1; if(t) solve(); else { cin>>t; while (t--) solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...