Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC了,贴短代码#include<iostream> #include<stdio.h> #define INF 10000000 #define MAXN 101000 #define FOR(i,l,r) for (i=l;i<=r;i++) #define NX(i) ((i==n)?1:(i+1)) #define LX(i) ((i==1)?n:(i-1)) #define D1(i,j) ((i>=j)?(i-j):(INF-j+i)) #define D2(i,j) ((i==j)?0:((i>j)?(INF-i+j):(j-i))) using namespace std; int i,j,k,l,m,n; long long ans=(long long)(INF)*INF; static int a[MAXN]; void solve() { int i,j,k,o1=1,o2=1,u1=0,u2=0; long long tot=0; for (;D2(a[LX(o1)],a[1])<=D1(a[LX(o1)],a[1]);o1=LX(o1),tot+=(long long)(D2(a[o1],a[1])),u1++); for (;D2(a[NX(o2)],a[1])>D1(a[NX(o2)],a[1]);o2=NX(o2),tot+=(long long)(D1(a[o2],a[1])),u2++); FOR(i,1,n) { ans=min(ans,tot); if (i==n) break; if (o2==i) {o2=NX(o2);tot+=(long long)(n-1)*D1(a[NX(i)],a[i])-D2(a[o1],a[i]);o1=NX(o1);} for (tot-=(u2?D1(a[NX(i)],a[i])*(long long)(u2--):0);D2(a[NX(o2)],a[i+1])>D1(a[NX(o2)],a[i+1]);) { o2=NX(o2);tot+=(long long)(D1(a[o2],a[i+1]));u2++; } for (tot+=(u1!=n-1?D1(a[NX(i)],a[i])*(long long)(++u1):0);D2(a[o1],a[i+1])>D1(a[o1],a[i+1]);) { tot-=(long long)(D2(a[o1],a[i+1]));o1=NX(o1);u1--; } } printf("%I64d\n",ans); } void qs(int l,int r) { int i=l,j=r,k=a[(l+r)/2]; while (i<=j) { for (;a[i]<k;i++); for (;k<a[j];j--); if (i<=j) swap(a[i++],a[j--]); } if (i<r) qs(i,r); if (j>l) qs(l,j); } int main() { scanf("%d",&n); FOR(i,1,n) scanf("%d",&a[i]); qs(1,n);solve(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator