本题解与Luogu同步
Solution
纯模拟,不涉及任何算法。对于输入和输出,应该是这个鸭子:
很明显,这个为一左一右交叉输出。
我们发现,若从中间把原序列分成相等长度的两块,前半段全部是正序输出,且相隔一个,对应输出应该是\(2n-1\);后半段全部为倒序输出,也是隔一个输出一个。
仔细思考,反过来:对于任一位置\(i\),若\(i\)为奇数,它对应的数应该是序列中的\((i+1)/2\)个;若\(i\)为偶数,则应该是\(n-i/2+1\)
于是我们就可以愉快的水代码了,但是这里要注意特判一下\(1\)
AC Code
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int t, n;
int b[307];
int main()
{
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &b[i]);
if(n == 1)
{
printf("%d\n", b[1]);
continue;
}
printf("%d %d ", b[1], b[n]);
for(int i = 3; i <= n; i++)
{
if(i % 2 == 1)
{
printf("%d ", b[(i + 1) / 2]);
}
else
{
printf("%d ", b[n - (i / 2) + 1]);
}
}
printf("\n");
}
return 0;
}