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 |
Re:检查相邻的肯定错了。。。贴个正确的代码In Reply To:检查相邻的肯定错了。。。贴个正确的代码 Posted by:1012662902 at 2015-05-20 19:22:08 > #include <cstdio> > #include <cstring> > #include <algorithm> > #include <iostream> > #include <vector> > #include <queue> > #include <cmath> > #include <set> > using namespace std; > > #define N 10005 > #define inf 999999999 > > __int64 max(__int64 a,__int64 b){return a>b?a:b;} > __int64 min(__int64 a,__int64 b){return a<b?a:b;} > > struct node{ > __int64 x, y; > }a[N]; > > int n, d; > main() > { > int i, j, k; > int maxh, minh; > while(scanf("%d %d",&n,&d)==2){ > maxh=-1; > for(i=0;i<n;i++){ > scanf("%I64d %I64d",&a[i].x,&a[i].y); > maxh=max(maxh,a[i].x); > minh=min(minh,a[i].x); > } > maxh=(maxh-minh)/d; > __int64 ans=a[0].x*a[0].y; > for(i=1;i<n;i++){ > int v=-1; > for(j=i-1;j>=0;j--){ > if(i-j>maxh) break; //起码需要往前找maxh个,再往前面找就没有意义了 > int aa=(a[i].x-a[j].x)/(i-j);//初略估计时间复杂度最多为5000*4999/2+5000^2<5000W 不会超时 > if(v<aa&&d<aa){ > v=aa; > k=j; > } > } > if(v!=-1) ans+=a[k].x*a[i].y+a[i].y*(__int64)(d*(i-k)); > else ans+=a[i].x*a[i].y; > } > printf("%I64d\n",ans); > } > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator