| ||||||||||
| 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