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

Re:I am confused ... why WA?

Posted by Akvdynaxic at 2006-04-06 20:36:02 on Problem 1661
In Reply To:I am confused ... why WA? Posted by:Akvdynaxic at 2006-04-06 13:44:01
自己re
 
> 
> #include <iostream.h>
> #define MAXLONGINT 100000000;
> const int MAXN = 1005; 
> 
> struct node{
> 	int x1, x2, h;	// x1 - left, x2 - right, h - height
> };
> 
> int N, X, Y, MAX;
> node Platform[MAXN];  
> long f[MAXN][2];  
> // f[i]记录Jimmy到第i个平台时的最小唯一,f[i][0]记录到该平台左端,f[i][1]记录到该平台右端
> 
> void Sort(){
> 	int i, j;
> 	node temp;
> 	for (i = 1; i <= N - 1; ++ i)
> 		for (j = i + 1; j <= N; j ++)
> 			if (Platform[i].h < Platform[j].h || 
> 				Platform[i].h == Platform[j].h && Platform[i].x1 > Platform[j].x1){
> 				temp = Platform[i];
> 				Platform[i] = Platform[j];
> 				Platform[j] = temp;
> 			}
> }
> 
> // 纵向是常数,只对横向路程dp, 
> void Solve(){ 
> 	int i, j, delta;
> 	for (i = 1; i <= N; ++ i)
> 		if (X >= Platform[i].x1 && X <= Platform[i].x2 && 
> 			(Y - Platform[i].h) >= 0 && (Y - Platform[i].h) <= MAX)
> 			break;
> 	f[i][0] = X - Platform[i].x1; // 找到Jimmy能到达的第一个平台
> 	f[i][1] = Platform[i].x2 - X;
> 	int ii = i;
> 	for (; i <= N; i++)
> 		for (j = ii; j < i; j ++){
> 			delta = Platform[j].h - Platform[i].h;
> 			if (delta <= MAX && delta > 0){
> 				if (Platform[j].x1 >= Platform[i].x1 && Platform[j].x1 <= Platform[i].x2){
> 					if (f[j][0] + Platform[j].x1 - Platform[i].x1 < f[i][0])
> 						f[i][0] = f[j][0] + Platform[j].x1 - Platform[i].x1;
> 					if (f[j][0] + Platform[i].x2 - Platform[j].x1 < f[i][1])
> 						f[i][1] = f[j][0] + Platform[i].x2 - Platform[j].x1;
> 				};
> 				if (Platform[j].x2 >= Platform[i].x1 && Platform[j].x2 <= Platform[i].x2){
> 					if (f[j][1] + Platform[j].x2 - Platform[i].x1 < f[i][0])
> 						f[i][0] = f[j][1] + Platform[j].x2 - Platform[i].x1;
> 					if (f[j][1] + Platform[i].x2 - Platform[j].x2 < f[i][1])
> 						f[i][1] = f[j][1] + Platform[i].x2 - Platform[j].x2;
> 				};
> 			}
> 		}
> }
> 
> void Print(){
> 	long ans = MAXLONGINT;
> 	int i, H = Platform[N].h;
> 	i = N;
> 	while (true){
> 		if (i < 1 || Platform[i].h != H) break;
> 		if (f[i][0] < ans)
> 			ans = f[i][0];
> 		if (f[i][1] < ans)
> 			ans = f[i][1];
> 		i --;
> 	}
> 	ans += Y;  // 加上y方向的路程
> 	cout << ans << endl;
> }
> 
> void main(){
> 	int t, i;
> 	cin >> t;
> 	while (t --){
> 		cin >> N >> X >> Y >> MAX;
> 		for (i = 1; i <= N; i ++){
> 			f[i][0] = MAXLONGINT;
> 			f[i][1] = MAXLONGINT;
> 		}
> 		for (i = 1; i <= N; i ++)
> 			cin >> Platform[i].x1 >> Platform[i].x2 >> Platform[i].h;
> 		Sort();
> 		Solve();
> 		Print();
> 	}
> }
> 	

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