题目大意
走完半径为n的蜂窝图并使尽可能多的拐弯,输出路线
(可以发现,能够实现不走直线走完整张图)
图
(以上是比赛时候的草稿…
思路
从外到内可以将图划分为一个个宽度为2的环,每个环可以实现不走直线的路线覆盖
若n为偶数除去中心点将最内圈环直接走一遍,由于最内圈边长为1,也能够实现不走直线
于是划分奇偶
例如:
对于每个宽为2的环 先走折线 碰到拐角的时候横着走一下再走折线
code
#include <bits/stdc++.h>
using namespace std;
void pp(int x){
if(x==2)printf("356123"); // 最内圈直接输出(
else if(x==3){
printf("324564615126231342"); // 最内圈直接输出(
}
else if(x%2==0){
printf("23");
for(int i=0;i<x-2;i++)printf("53");
printf("5");
for(int i=0;i<x-2;i++)printf("64");
printf("6");
for(int i=0;i<x-2;i++)printf("15");
printf("1");
for(int i=0;i<x-2;i++)printf("26");
printf("2");
for(int i=0;i<x-2;i++)printf("31");
printf("3");
for(int i=0;i<x-3;i++)printf("42");
printf("3");
}
else{
printf("324");
for(int i=0;i<x-3;i++)printf("53");
printf("5");
for(int i=0;i<x-2;i++)printf("64");
printf("6");
for(int i=0;i<x-2;i++)printf("15");
printf("1");
for(int i=0;i<x-2;i++)printf("26");
printf("2");
for(int i=0;i<x-2;i++)printf("31");
printf("3");
for(int i=0;i<x-2;i++)printf("42");
}
}
int main() {
int t,n;
scanf("%d",&t);
while(t--){ //
scanf("%d",&n);
if(n%2==0){
for(int i=2;i<=n;i+=2)pp(i);
}
else for(int i=3;i<=n;i+=2)pp(i);
printf("\n");
}
return 0;
}