ACGO首AC的狗-题解
2024-04-14 14:47:29
发布于:上海
70阅读
0回复
0点赞
分享我的题解
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int t;//t表示次数
cin>>t;//输入次数
for(int i=0;i<t;i++){//重复执行t次
int n,x;//设置字符串长度n和索引差x
cin>>n>>x;//输入字符串长度和索引差
int array[111110]={},backup_copy[111110]={};//放置两个数组,backup_copy表示备用数组
for(int j=0;j<n;j++){//重复执行输入对应的项目
cin>>array[j];//输入数组中对应的数
backup_copy[j]=array[j];//同时将备用数组的对应项给赋值
}
sort(backup_copy,backup_copy+n);//排序
if(x>n/2){//如果有交换涉及盲区那么分类讨论
bool cando=1;//开标志变量标记能否做到排序
for(int j=n-x;j<x;j++){//这里是它交换的涉及盲区,判断是否符合排序玩后的要求顺序,不符合就NO,符合就YES
if(backup_copy[j]!=array[j]){//如果在这个交换涉及的盲区里面顺序和整理好的数组里面的数据顺序有出入,那么说明这个数组再怎么排序都排不好
cout<<"NO\n";//输出NO,换行
cando=0;//记得修改标志变量的值
break;//退出循环
}
}
if(cando)cout<<"YES\n";//根据标志变量判断,如果可以输出YES,换行
}
else cout<<"YES\n";//如果没有涉及盲区那么一定能做到(数学方法能够证明,这里省略)
}
return 0;
}
//署名:沈思邈
这里空空如也
有帮助,赞一个