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+y→y+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 1≤i,j≤n, i ≠ j i\neq j i=j),使得对于所有的 k k k( 1 ≤ k ≤ n 1\leq k\leq n 1≤k≤n), 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使得