# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
58104 | Benq | Experiments with Gorlum (IZhO13_expgorl) | C++14 | 5 ms | 1240 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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
*/
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |