构造 - Codeforces Round #319 (Div. 1)C. Points on Plane

简介: Points on Plane  Problem's Link   Mean:  在二维坐标中给定n个点,求一条哈密顿通路。 analyse:  一开始忽略了“无需保证路径最短”这个条件,一直在套最短哈密顿通路的模板,无限TLE。

Points on Plane 

Problem's Link


 

Mean: 

在二维坐标中给定n个点,求一条哈密顿通路。

analyse:

 一开始忽略了“无需保证路径最短”这个条件,一直在套最短哈密顿通路的模板,无限TLE。

简单的构造,首先对x坐标设一个阀值,分段输出,从下到上、再从上到下、在从下到上...直到所有点输出完为止。

当然也可横向扫描输出。

Time complexity: O(N)

 

Source code: 

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-09-11-16.00
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long( LL);
typedef unsigned long long( ULL);
const double eps( 1e-8);

const int N = 1010;
int n;
vector < pair < int , int > > X [N ];
vector < int > res;
int main()
{
      scanf( "%d" , &n);
      for( int i = 0; i <n; ++ i)
      {
            int x , y;
            scanf( "%d %d" , & x , & y);
            X [ x / 1000 ]. push_back( make_pair( y , i));
      }
      for( int i = 0; i <= 1000; ++ i)
      {
            sort( X [ i ]. begin (), X [ i ]. end());
            if( i & 1)
                  reverse( X [ i ]. begin (), X [ i ]. end());
            for( auto & it: X [ i ])
                  printf( "%d " , 1 + it . second);
      }
      return 0;
}

 

目录
相关文章
Codeforces Round #192 (Div. 2) (330B) B.Road Construction
要将N个城市全部相连,刚开始以为是最小生成树的问题,其实就是一道简单的题目。 要求两个城市之间不超过两条道路,那么所有的城市应该是连在一个点上的,至于这个点就很好找了,只要找到一个没有和其他点有道路限制的即可。
56 0
|
机器学习/深度学习 Windows
Codeforces Round #748 (Div. 3) F - Red-Black Number (记忆化搜索)
Codeforces Round #748 (Div. 3) F - Red-Black Number (记忆化搜索)
106 0
Codeforces Round #747 (Div. 2) D. The Number of Imposters(扩展域并查集 带权并查集)
Codeforces Round #747 (Div. 2) D. The Number of Imposters(扩展域并查集 带权并查集)
120 0