andyli

题解 CF1203A 【Circle of Students】
本题可以用STL中的$list$来轻松实现,先声明两个$list$分别初始化成$1~n$和$n~1$,接下来每次将...
扫描右侧二维码阅读全文
14
2019/08

题解 CF1203A 【Circle of Students】

本题可以用STL中的$list$来轻松实现,先声明两个$list$分别初始化成$1~n$和$n~1$,接下来每次将题目给出的序列循环处理,每次将序列尾部的那个数移至序列首部,判断是否与初始化的两个list相等即可。
代码如下:

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <list>
#include <numeric>
using namespace std;
const int maxn = 205;

int main()
{
    int T;
    scanf("%d", &T);
    while (T--) {
        int n;
        scanf("%d", &n);
        list<int> a1, b1;
        for (int i = 1; i <= n; i++)
            a1.push_back(i), b1.push_back(i); // 初始化两个序列
        b1.reverse(); // 将第二个序列变为n~1
        list<int> li; // 输入的序列
        for (int i = 1; i <= n; i++) {
            int x;
            scanf("%d", &x);
            li.push_back(x);
        }
        if (li == a1 || li == b1)
            printf("YES\n");
        else {
            bool flag = false;
            for (int i = 1; i <= n && !flag; i++) {
                int x = li.back();
                li.pop_back();
                li.push_front(x); // 序列尾部那个数移至序列首部
                if (li == a1 || li == b1)
                    flag = true;
            }
            printf("%s\n", flag ? "YES" : "NO");
        }
    }
    return 0;
}
Last modification:November 6th, 2019 at 05:14 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment