Submission #1044179

#TimeUsernameProblemLanguageResultExecution timeMemory
1044179vjudge1Svjetlost (COI18_svjetlost)C++17
0 / 100
929 ms1056 KiB
#include <bits/stdc++.h> using namespace std; #define int long double #define point pair<int,int> #define x first #define y second int const pi=3.141592653589793; int const oe=180; int angle(point p1,point p2){ int deltaY = p2.y - p1.y; int deltaX = p2.x - p1.x; int dg = (atan2(deltaY, deltaX) * oe) / pi; if(dg<0) dg+=360; return dg; } bool check(int a1,int a2){ if(a1<=180) return (a2<a1) || (a2>a1+oe); else return (a2>a1-oe && a2<a1); } int dist(point a,point b){ return sqrt(((a.x-b.x)*(a.x-b.x))+((a.y-b.y)*(a.y-b.y))); } int solve(vector<point> pts){ int n=pts.size(); if(n==1) return 0; else if(n==2) return dist(pts[0],pts[1]); for (int i = 0; i < n; ++i){ pts.push_back(pts[i]); } int len=dist(pts[0],pts[1])+dist(pts[1],pts[2]); int maxx=len; int p1=0,p2=2; int a=0,b=2; while(p1<n){ int a1=angle(pts[p1],pts[p1+1]); int a2=angle(pts[p2+1],pts[p2]); // cout<<a1<<' '<<a2<<endl; if(p2+1<p1+n && a1!=a2 && check(a1,a2)){ len+=dist(pts[p2],pts[p2+1]); p2+=1; } else{ len-=dist(pts[p1],pts[p1+1]); p1+=1; } if(len>maxx){ maxx=len; a=p1,b=p2; } // maxx=max(maxx,len); } cout<<a<<' '<<b<<endl; return maxx; } signed main(){ int n; cin>>n; vector<point> pts(n); for (int i = 0; i < n; ++i) cin>>pts[i].x>>pts[i].y; cout<<fixed; cout<<setprecision(10)<<solve(pts)<<endl;; int q; cin>>q; vector<bool> del(n,0); while(q--){ int d; cin>>d; del[d-1]=1; vector<point> p; for (int i = 0; i < n; ++i) if(del[i]==0) p.push_back(pts[i]); cout<<solve(p)<<endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...