Skibidus and Fanum Tax (easy version)----Skibidus 和 Fanum 税(简易版)
B - 相知无间然
https://vjudge.net/problem/CodeForces-2065C1/origin
这是问题的简单版本。在这个版本中,m=1m=1。
Skibidus 获得了两个数组 aa 和 bb,分别包含 nn 和 mm 个元素。对于每个整数 ii 从 11 到 nn,他可以执行操作 最多一次:
- 选择一个整数 jj 使得 1≤j≤m1≤j≤m。设置 ai:=bj−aiai:=bj−ai。注意,aiai 可能会因为这个操作而变为非正数。
Skibidus 需要你的帮助来确定他是否可以通过执行上述操作若干次将 aa 排成非递减顺序∗∗。
∗∗aa 如果 a1≤a2≤…≤ana1≤a2≤…≤an,则 aa 是非递减顺序的。
输入
第一行包含一个整数 tt (1≤t≤1041≤t≤104) — 测试用例的数量。
每个测试用例的第一行包含两个整数 nn 和 mm (1≤n≤2⋅1051≤n≤2⋅105, m = 1m = 1)。
每个测试用例的下一行包含 nn 个整数 a1,a2,…,ana1,a2,…,an (1≤ai≤1091≤ai≤109)。
每个测试用例的下一行包含 mm 个整数 b1,b2,…,bmb1,b2,…,bm (1≤bi≤1091≤bi≤109)。
保证所有测试用例中 nn 的总和和 mm 的总和不超过 2⋅1052⋅105。
输出
对于每个测试用例,如果可以将 aa 排成非递减顺序,则在新的一行打印 "YES"。否则,在新的一行打印 "NO"。
你可以以任何大小写输出答案。例如,字符串 "yEs"、"yes" 和 "Yes" 也会被识别为肯定的回应。
示例
Inputcopy | Outputcopy |
---|---|
5 1 1 5 9 3 1 1 4 3 3 4 1 1 4 2 5 6 4 1 5 4 10 5 4 3 1 9 8 7 8 | YES NO YES NO YES |
注意
在第一个测试用例中,[5][5] 已经是排序好的。
在第二个测试用例中,可以证明这是不可能的。
在第三个测试用例中,我们可以设置 a3:=b1−a3=6−2=4a3:=b1−a3=6−2=4。序列 [1,4,4,5][1,4,4,5] 是非递减顺序。
在最后一个案例中,我们可以对每个索引应用操作。序列变为 [−1,0,1][−1,0,1],这是非递减顺序。
思路:
使循环,使每一个都保证在成立的情况下最小,不成立则结束
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int a[200005], n, m, e, t, q=0;
int main() {
scanf("%d", &t);
while(t--){
scanf("%d %d", &n, &m);
for (int i = 0;i < n;i++) {
scanf("%d", &a[i]);
}
scanf("%d", &e);
q = 0;
for (int i = 0;i < n;i++) {
if (i == 0) {
a[i] = a[i] < e - a[i] ? a[i] : e - a[i];
}//使第一个最小
else {
//使第i在成立的情况下最小
if (a[i] >= a[i - 1] && e - a[i] >= a[i - 1]) {
a[i] = a[i] < e - a[i] ? a[i] : e - a[i];
}
else if(a[i] >= a[i - 1]&& e - a[i] < a[i - 1]){
a[i] = a[i];
}
else if (a[i] < a[i - 1] && e - a[i] >= a[i - 1]) {
a[i] = e - a[i];
}
//不成立,返回
else {
q = 1;
break;
}
}
}
if (q) {
printf("No\n");
}
else {
printf("Yes\n");
}
}
return 0;
}