Submission #133124

#TimeUsernameProblemLanguageResultExecution timeMemory
133124sealnot123Mobile (BOI12_mobile)C++14
0 / 100
308 ms31492 KiB
#include<bits/stdc++.h> #define x first #define y second #define pb push_back #define eb emplace_back #define all(a) (a).begin(),(a).end() #define SZ(a) (int)(a).size() using namespace std; typedef long long LL; typedef pair<LL,LL> PLL; typedef pair<int,int> PII; typedef double D; typedef long double LD; const int N = 1000007; PLL tower[N]; PLL intersect(PLL a, PLL b){ LL A, B; A = a.y - b.y; B = b.x - a.x; if(B < 0) A = -A, B = -B; return {A, B}; } vector<PLL> line; void add(PLL nw){ while(SZ(line)>1){ int a = SZ(line); if(line[a-1].x == nw.x) return; PLL tmp1 = intersect(line[a-2], line[a-1]); PLL tmp2 = intersect(line[a-1], nw); if(tmp2.x*tmp1.y < tmp1.x*tmp2.y) line.pop_back(); else break; } line.pb(nw); } LD calc(LD a, int b){ return a*line[b].x + line[b].y; } LL L; int n; int main(){ int i,j; LL a,b; scanf("%d %lld",&n,&L); for(i=1;i<=n;i++){ scanf("%lld%lld",&a,&b); tower[i] = {-a*2ll, a*a + b*b}; } sort(tower+1, tower+1+n); for(i=1;i<=n;i++){ add(tower[i]); } LD ans = 0; for(i = 0; i < SZ(line)-1; i++){ PLL tmp = intersect(line[i], line[i+1]); LD tmp2 = (LD)tmp.x/tmp.y; if(tmp2 < 0 || tmp2 > L) continue; ans = max(ans, calc(tmp2, i) + tmp2*tmp2); } for(i=0; i<SZ(line)-1; i++){ if(calc(0, i) <= calc(0, i+1)) break; } ans = max(ans, calc(0, i)); for(i=0; i<SZ(line)-1; i++){ if(calc(L, i) <= calc(L, i+1)) break; } ans = max(ans, calc(L, i) + L*L); printf("%Lf",sqrt(ans)); return 0; } /* 2 10 0 0 11 1 */

Compilation message (stderr)

mobile.cpp: In function 'int main()':
mobile.cpp:42:8: warning: unused variable 'j' [-Wunused-variable]
  int i,j;
        ^
mobile.cpp:44:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %lld",&n,&L);
  ~~~~~^~~~~~~~~~~~~~~~~
mobile.cpp:46:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld%lld",&a,&b);
   ~~~~~^~~~~~~~~~~~~~~~~~
#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...
#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...
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...