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

These codes are almost same, but one is AC, the other is WA, why?

Posted by untitledcpp at 2010-08-17 00:26:37 on Problem 3037
//ACCODE
/*
TASK: PKU_3037 - Skiing
LANG: C++
NAME: untitled.cpp
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>

#define RMAX 100
#define CMAX 100

using namespace std;

struct NODE
{
	int x,y;
	double time;
	NODE(){};
	NODE(int _x,int _y,double _time)
	{
		x = _x; y = _y; time = _time;
	}
};
bool operator <(const NODE &left,const NODE &right)
{
	return left.time>right.time; //here
}

int table[RMAX][CMAX];
bool vis[RMAX][CMAX];

int main()
{
	FILE *fin=NULL,*fout=NULL;
	fin = freopen("input.txt","r",stdin);
	fout = freopen("output.txt","w",stdout);

	//Dijkstra。 O(RClog(RC))

	int v,r,c; scanf("%d%d%d",&v,&r,&c);
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++){
			scanf("%d",table[i]+j);
			if(!(0==i&&0==j)){
				table[i][j] -= table[0][0];
			}
		}
	}
	table[0][0] = 0;

	priority_queue<NODE> q; q.push(NODE(0,0,0.0l));
	for(int i=0;i<r;i++){
		fill(vis[i],vis[i]+c,false);
	}
	while(!q.empty()){
		NODE p=q.top(); q.pop();
		if(vis[p.x][p.y]){
			continue;
		}

		vis[p.x][p.y] = true;
		if(r-1==p.x&&c-1==p.y){
			printf("%.2lf\n",p.time); //here
			break;
		}

		double time=pow((double)2.0l,(double)table[p.x][p.y])/(double)v;
		int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
		for(int i=0;i<4;i++){
			int tempx=p.x+dx[i],tempy=p.y+dy[i];
			if(0<=tempx&&tempx<r&&0<=tempy&&tempy<c){
				if(!vis[tempx][tempy]){
					q.push(NODE(tempx,tempy,p.time+time)); //here
				}
			}
		}
	}

	//finalize
	if(NULL!=fin) fclose(fin);
	if(NULL!=fout) fclose(fout);

	return 0;
}

//WACODE
/*
TASK: PKU_3037 - Skiing
LANG: C++
NAME: untitled.cpp
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>

#define RMAX 100
#define CMAX 100

using namespace std;

struct NODE
{
	int x,y;
	double time;
	NODE(){};
	NODE(int _x,int _y,double _time)
	{
		x = _x; y = _y; time = _time;
	}
};
bool operator <(const NODE &left,const NODE &right)
{
	return left.time<right.time; //here
}

int table[RMAX][CMAX];
bool vis[RMAX][CMAX];

int main()
{
	FILE *fin=NULL,*fout=NULL;
	fin = freopen("input.txt","r",stdin);
	fout = freopen("output.txt","w",stdout);

	//Dijkstra。 O(RClog(RC))

	int v,r,c; scanf("%d%d%d",&v,&r,&c);
	for(int i=0;i<r;i++){
		for(int j=0;j<c;j++){
			scanf("%d",table[i]+j);
			if(!(0==i&&0==j)){
				table[i][j] -= table[0][0];
			}
		}
	}
	table[0][0] = 0;

	priority_queue<NODE> q; q.push(NODE(0,0,0.0l));
	for(int i=0;i<r;i++){
		fill(vis[i],vis[i]+c,false);
	}
	while(!q.empty()){
		NODE p=q.top(); q.pop();
		if(vis[p.x][p.y]){
			continue;
		}

		vis[p.x][p.y] = true;
		if(r-1==p.x&&c-1==p.y){
			printf("%.2lf\n",-p.time); //here
			break;
		}

		double time=pow((double)2.0l,(double)table[p.x][p.y])/(double)v;
		int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
		for(int i=0;i<4;i++){
			int tempx=p.x+dx[i],tempy=p.y+dy[i];
			if(0<=tempx&&tempx<r&&0<=tempy&&tempy<c){
				if(!vis[tempx][tempy]){
					q.push(NODE(tempx,tempy,p.time-time)); //here
				}
			}
		}
	}

	//finalize
	if(NULL!=fin) fclose(fin);
	if(NULL!=fout) fclose(fout);

	return 0;
}

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