Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h> //ternary search
- using namespace std;
- int n;
- int cx[50];
- int cy[50];
- int vx[50];
- int vy[50];
- long double ans, answ;
- void output(){
- cout << setprecision(9) << fixed << answ;
- }
- void input(){
- cin >> n;
- for(int i = 0; i < n; i++){
- cin >> cx[i];
- }
- for(int i = 0; i < n; i++){
- cin >> cy[i];
- }
- for(int i = 0; i < n; i++){
- cin >> vx[i];
- }
- for(int i = 0; i < n; i++){
- cin >> vy[i];
- }
- }
- long double weight(long double t){
- long double r = cx[0]+vx[0]*t;
- for(int i = 0; i < n; i++){
- if(cx[i]+vx[i]*t > r){
- r = cx[i]+vx[i]*t;
- }
- }
- long double l = cx[0]+vx[0]*t;
- for(int i = 0; i < n; i++){
- if(cx[i]+vx[i]*t < l){
- l = cx[i]+vx[i]*t;
- }
- }
- return abs(r-l);
- }
- long double high(long double t){
- long double up = cy[0]+vy[0]*t;
- for(int i = 0; i < n; i++){
- if(cy[i]+vy[i]*t > up){
- up = cy[i]+vy[i]*t;
- }
- }
- long double dw = cy[0]+vy[0];
- for(int i = 0; i < n; i++){
- if(cy[i]+vy[i]*t < dw){
- dw = cy[i]+vy[i]*t;
- }
- }
- return abs(up-dw);
- }
- long double ts(){
- long double l, r, mid1, mid2, hg, wg;
- int tryes = 0;
- l = 0;
- r = 200;
- while(tryes < 40){
- tryes++;
- mid1 = (1.0 / 3.0) * abs(weight(l) - weight(r));
- mid2 = (2.0 / 3.0) * abs(weight(l) - weight(r));
- if(weight(l) < mid1){
- r = mid1;
- continue;
- }else if(weight(r) < mid2){
- l = mid2;
- continue;
- }else{
- l = mid1;
- r = mid2;
- }
- }
- cout << l << ' ' << r << endl;
- wg = abs((l+r) / 2.0);
- cout << wg << " ";
- tryes = 0, l = 0, r = 200;
- while(tryes < 40){
- tryes++;
- mid1 = (1.0 / 3.0) * abs(high(l) - high(r));
- mid2 = (2.0 / 3.0) * abs(high(l) - high(r));
- /*cout << " mid 1 = " << mid1 << " mid2 = " << mid2 << " l = " << l << " r = " << r << endl;
- */if(high(l) < mid1){
- r = mid1;
- continue;
- }else if(high(r) < mid2){
- l = mid2;
- continue;
- }else{
- l = mid1;
- r = mid2;
- }
- }
- hg = abs((l+r) / 2.0);
- return max(hg, wg);
- }
- void solve(){
- ans = ts();
- /*cout << weight(2) << " " << weight(ans) << endl;
- cout << high(2) << " " << high(ans) << endl;*/
- answ = max(weight(ans), high(ans));
- }
- int main(){/*
- freopen("catchthehmice.in", "r", stdin);
- freopen("catchthehmice.out", "w", stdout);*/
- input();
- solve();
- output();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement