CF1462A Favorite Sequence

本题解与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;
}
posted @ 2021-01-09 12:20  W-RB  阅读(83)  评论(0编辑  收藏  举报