Submission #61739

#TimeUsernameProblemLanguageResultExecution timeMemory
61739ansol4328전봇대 (KOI13_pole)C++98
100 / 100
39 ms8756 KiB
#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; struct A { double val; int cnt; }; A m[100002]; int cmp(const A &a, const A &b) { return a.val<b.val; } long long min(long long a, long long b) {return a<b ? a : b;} int n, x[100002]; long long out; long long sum(long long gap) { long long s=0; int i; for(i=1 ; i<n ; i++) s+=abs(gap*i-x[i]); return s; } int main() { int i; long long xx, c=0; scanf("%d",&n); for(i=0 ; i<n ; i++) scanf("%d",&x[i]); for(i=1 ; i<n ; i++) m[i].val=(double)x[i]/i, m[i].cnt=i; sort(m+1,m+n,cmp); xx=(long long)n*(n-1)/2; out=sum(m[1].val); if(xx%2==1) { xx=(xx+1)/2; i=1; while(c<xx) c+=m[i++].cnt; i--; out=min(out,sum(m[i].val)); out=min(out,sum(m[i].val+1)); out=min(out,sum(m[i].val-1)); } else { i=1; xx/=2; while(c<xx) c+=m[i++].cnt; i--; if(c>=xx+1) { out=min(out,sum(m[i].val)); out=min(out,sum(m[i].val+1)); out=min(out,sum(m[i].val-1)); } if(c==xx) { out=min(out,sum(m[i].val)); out=min(out,sum(m[i].val+1)); out=min(out,sum(m[i].val-1)); out=min(out,sum(m[i+1].val)); out=min(out,sum(m[i+1].val+1)); out=min(out,sum(m[i+1].val-1)); } } printf("%lld",out); return 0; }

Compilation message (stderr)

pole.cpp: In function 'int main()':
pole.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
     ~~~~~^~~~~~~~~
pole.cpp:38:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(i=0 ; i<n ; i++) scanf("%d",&x[i]);
                          ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...