Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

检查相邻的肯定错了。。。贴个正确的代码

Posted by 1012662902 at 2015-05-20 19:22:08 on Problem 2393 and last updated at 2015-05-20 19:23:27
#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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator