답안 #58104

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
58104 2018-07-16T20:41:34 Z Benq 생물 실험 (IZhO13_expgorl) C++14
100 / 100
5 ms 1240 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;

#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()

const int MOD = 1000000007;
const ll INF = 1e18;
const int MX = 100001;

int K;
string S;
pi b, cur;
pl ans = {9e18,-9e18};
vpi test;

ll get(pi x, int d) {
    x.f += d*cur.f;
    x.s += d*cur.s;
    return (ll)x.f*x.f+(ll)x.s*x.s;
}

void solve(pi x) {
    ans.s = max(ans.s,get(x,K-1));    
    ans.s = max(ans.s,get(x,0));    
    int L = 0, R = K-1;
    while (L+2 < R) {
        int L1 = (2*L+R)/3, R1 = (L+2*R)/3;
        if (get(x,L1) < get(x,R1)) R = R1;
        else L = L1;
    }
    FOR(i,L,R+1) ans.f = min(ans.f,get(x,i));
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> K >> S;
    pi a; cin >> a.f >> a.s;
    cin >> b.f >> b.s; b.f -= a.f, b.s -= a.s;
    F0R(i,sz(S)) {
        test.pb({b.f+cur.f,b.s+cur.s});
        switch(S[i]) {
            case 'L':
                cur.f --;
                break;
            case 'R':
                cur.f ++;
                break;
            case 'F':
                cur.s ++;
                break;
            case 'B':
                cur.s --;
                break;
            default:
                break;
        }
    }
    for (auto a: test) solve(a);
    cout << fixed << setprecision(12) << sqrt((ld)ans.f) << " " << sqrt((ld)ans.s);
}

/* Look for:
* the exact constraints (multiple sets are too slow for n=10^6 :( ) 
* special cases (n=1?)
* overflow (ll vs int?)
* array bounds
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Output is correct
2 Correct 4 ms 504 KB Output is correct
3 Correct 3 ms 660 KB Output is correct
4 Correct 3 ms 660 KB Output is correct
5 Correct 2 ms 700 KB Output is correct
6 Correct 4 ms 888 KB Output is correct
7 Correct 2 ms 888 KB Output is correct
8 Correct 2 ms 1004 KB Output is correct
9 Correct 4 ms 1132 KB Output is correct
10 Correct 4 ms 1148 KB Output is correct
11 Correct 4 ms 1180 KB Output is correct
12 Correct 5 ms 1180 KB Output is correct
13 Correct 5 ms 1180 KB Output is correct
14 Correct 4 ms 1180 KB Output is correct
15 Correct 5 ms 1180 KB Output is correct
16 Correct 5 ms 1240 KB Output is correct
17 Correct 5 ms 1240 KB Output is correct
18 Correct 5 ms 1240 KB Output is correct
19 Correct 5 ms 1240 KB Output is correct
20 Correct 5 ms 1240 KB Output is correct