码迷,mamicode.com
首页 > 其他好文 > 详细

CF #319 div 2 E

时间:2015-09-17 16:54:37      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

在一个边长为10^6正方形中,可以把它x轴分段,分成1000段。奇数的时候由底往上扫描,偶数的时候由上往下扫描。估计一下这个最长的长度,首先,我们知道有10^6个点,则y邮方向最多移动10^3*10^6。对于x轴方向,如果都在一个段内,则最多移动 10^3*10^6,如果均不在一个段内,最多就2000*10^3。比限制长度肯定要小。

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

struct Point{
	int x,y,i;
	Point(){};
	Point (int xx,int yy,int ii){
		x=xx;y=yy;i=ii;
	}
}p[1000005];

bool cmp(Point a,Point b){
	if(a.x/1000==b.x/1000){
		if(a.x/1000%2==0){
			if(a.y<b.y) return true;
			return false;
		}
		else{
			if(a.y>b.y) return true;
			return false;
		}
	}
	else{
		if(a.x<b.x) return true;
		return false;
	}
}

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;i++){
			scanf("%d%d",&p[i].x,&p[i].y);
			p[i].i=i+1;
		}
		sort(p,p+n,cmp);
		printf("%d",p[0].i);
		for(int i=1;i<n;i++)
			printf(" %d",p[i].i);
		puts("");
	}
	return 0;
}

 

CF #319 div 2 E

标签:

原文地址:http://www.cnblogs.com/jie-dcai/p/4816637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!