题目大意:在一个平面里有n个点,点坐标的值在1-1e6之间,让你给出一个遍历所有点的顺序,要求每个点走一次,且
曼哈顿距离之和小于25*1e8。
思路:想了一会就有了思路,我们可以把1e6的x,y坐标都分成2000份,每份500,然后这样整个平面就被分成
了2000*2000个区域,然后按区域输出点就行了。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 vector<int> ans[2005][2005]; 5 int main() 6 { 7 scanf("%d",&n); 8 for(int i=1;i<=n;i++) 9 { 10 int x,y; scanf("%d%d",&x,&y); 11 ans[x/500][y/500].push_back(i); 12 } 13 bool flag=false; 14 for(int i=0;i<=2004;i++) 15 { 16 if(!flag) 17 { 18 for(int j=0;j<=2004;j++) 19 { 20 for(int k:ans[i][j]) printf("%d ",k); 21 } 22 } 23 else 24 { 25 for(int j=2004;j>=0;j--) 26 { 27 for(int k:ans[i][j]) printf("%d ",k); 28 } 29 } 30 flag=!flag; 31 } 32 return 0; 33 }