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:看discuss大家都是2次sort,为啥我就TLE呢?

Posted by temp_ptr at 2011-09-03 14:10:42 on Problem 1974
In Reply To:看discuss大家都是2次sort,为啥我就TLE呢? Posted by:temp_ptr at 2011-09-02 00:02:50
我把代码贴出来,已经2天了,还是TLE:
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define FSTREAM
int case_num = 0;
int row, collumn, stone_num;//[1, 131072]
struct MyPoint
{
		int x,y;
};
MyPoint stone_pos[140000];
bool MyCompXY(MyPoint a, MyPoint b)
{
		if(a.x < b.x)
				return true;
		else if(a.x > b.x)
				return false;
		else if(a.y < b.y)
				return true;
		else
				return false;
}
bool MyCompYX(MyPoint a, MyPoint b)
{
		if(a.y < b.y)
				return true;
		else if(a.y > b.y)
				return false;
		else if(a.x < b.x)
				return true;
		else
				return false;
}
int main()
{
		int num_of_situation, pre_x, pre_y, diff_row_num, diff_coll_num;
#ifdef FSTREAM
		fstream fin("1974.txt");
		fin>>case_num;
		while(case_num--)
		{
				fin>>row>>collumn>>stone_num;
				for(int i = 0; i < stone_num; i++)
						fin>>stone_pos[i].x>>stone_pos[i].y;
#else
		cin>>case_num;
		while(case_num--)
		{
				cin>>row>>collumn>>stone_num;
				for(int i = 0; i < stone_num; i++)
						cin>>stone_pos[i].x>>stone_pos[i].y;
#endif
				num_of_situation = 0;
				//////////////////////////////////////////////////////////////////////////
				sort(stone_pos, stone_pos+stone_num, MyCompXY);
				pre_x = stone_pos[0].x;
				pre_y = stone_pos[0].y;
				if(pre_y >= 3)
						num_of_situation++;
				diff_row_num = 1;
				for(int i = 1; i < stone_num; i++)
				{
						if(stone_pos[i].x != pre_x)//换行
						{
								diff_row_num++;
								if(collumn - pre_y >= 2)//上一行的行末是否可以容纳2
										num_of_situation++;
								if(stone_pos[i].y >= 3)//新行
										num_of_situation++;
						}
						else if(stone_pos[i].y - pre_y >= 3)
										num_of_situation++;
						pre_x = stone_pos[i].x;
						pre_y = stone_pos[i].y;
				}
				if(collumn - pre_y >= 2)//最后石头的行末是否可以容纳2
						num_of_situation++;
				if(collumn >= 2)
						num_of_situation += (row - diff_row_num);//空白行数
				//////////////////////////////////////////////////////////////////////////
				sort(stone_pos, stone_pos+stone_num, MyCompYX);
				pre_x = stone_pos[0].x;
				pre_y = stone_pos[0].y;
				if(pre_x >= 3)
						num_of_situation++;
				diff_coll_num = 1;
				for(int i = 1; i < stone_num; i++)
				{
						if(stone_pos[i].y != pre_y)//换列
						{
								diff_coll_num++;
								if(row - pre_x >= 2)//上一列的列末是否可以容纳2
										num_of_situation++;
								if(stone_pos[i].x >= 3)//新列
										num_of_situation++;
						}
						else if(stone_pos[i].x - pre_x >= 3)
								num_of_situation++;
						pre_x = stone_pos[i].x;
						pre_y = stone_pos[i].y;
				}
				if(row - pre_x >= 2)//最后石头的列末是否可以容纳2
						num_of_situation++;
				if(row >= 2)
						num_of_situation += (collumn - diff_coll_num);//空白列数
				cout<<num_of_situation<<endl;
		}
		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