Codeforces Round 947 (Div. 1 + Div. 2) A~F

A.Bazoka and Mocha’s Array(思维)

题意:

摩卡喜欢数组,所以在出发前,巴祖卡送给她一个由 n n n个正整数组成的数组 a a a作为礼物。

现在,摩卡想知道数组 a a a在执行下面的操作若干次(可能是零次)后,能否以不递减的顺序排序:

  • 将数组分成前缀和后缀两部分,然后交换这两部分。换句话说,让 a = x + y a=x+y a=x+y。然后,我们可以设置 a : = y + x a:=y+x a:=y+x。这里 + + +表示数组连接操作。

例如,如果是 a = [ 3 , 1 , 4 , 1 , 5 ] a=[3,1,4,1,5] a=[3,1,4,1,5],我们可以选择 x = [ 3 , 1 ] x=[3,1] x=[3,1] y = [ 4 , 1 , 5 ] y=[4,1,5] y=[4,1,5],满足 a = x + y a=x+y a=x+y。然后,我们可以设置 a : = y + x = [ 4 , 1 , 5 , 3 , 1 ] a:=y+x=[4,1,5,3,1] a:=y+x=[4,1,5,3,1]。我们还可以选择 x = [ 3 , 1 , 4 , 1 , 5 ] x=[3,1,4,1,5] x=[3,1,4,1,5] y = [   ] y=[\,] y=[],满足 a = x + y a=x+y a=x+y。然后,我们可以设置 a : = y + x = [ 3 , 1 , 4 , 1 , 5 ] a:=y+x=[3,1,4,1,5] a:=y+x=[3,1,4,1,5]。注意,我们不能选择 x = [ 3 , 1 , 1 ] x=[3,1,1] x=[3,1,1] y = [ 4 , 5 ] y=[4,5] y=[4,5],也不能选择 x = [ 1 , 3 ] x=[1,3] x=[1,3] y = [ 5 , 1 , 4 ] y=[5,1,4] y=[5,1,4],因为这两个选项都不满足 a = x + y a=x+y a=x+y

分析:

x + y → y + x x+y→y+x x+yy+x的操作其实就是把数组开头的一段移动到末尾。如果操作大于一次,可以合并成一个操作。因此最多操作一次。直接复制两边进行判定即可。

代码:

#include<bits/stdc++.h>

using namespace std;

int main() {
   
    int t;
    cin >> t;
    while (t--) {
   
        int n;
        cin >> n;
        vector<int> a(n + n);
        for (int i = 0; i < n; i++) {
   
            cin >> a[i];
            a[i + n] = a[i];
        }
        bool flag = 0;
        for (int i = 0; i < n; i++) {
   
            bool fl = 1;
            for (int j = i; j + 1 < i + n; j++) {
   
                fl &= (a[j] <= a[j + 1]);
            }
            flag |= fl;
        }
        if (flag) {
   
            cout << "Yes" << endl;
        } else {
   
            cout << "No" << endl;
        }
    }
    return 0;
}

B.378QAQ and Mocha’s Array(思维)

题意:

摩卡喜欢数组,所以在出发前,378QAQ送给她一个由 n n n个正整数组成的数组 a a a作为礼物。

摩卡认为,如果存在两个数 i i i j j j 1 ≤ i , j ≤ n 1\leq i,j\leq n 1i,jn i ≠ j i\neq j i=j),使得对于所有的 k k k 1 ≤ k ≤ n 1\leq k\leq n 1kn), a k a_k ak都能被 a i a_i ai a j a_j aj整除 † ^\dagger ,那么 a a a就是美丽的。

判断 a a a是否美丽。

† ^\dagger 如果存在整数 z z z使得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值