A. Jagged Swaps
当ai-1<ai>ai+1(i>1)时可以交换ai和ai+1,判断能否将序列变为有序。
解析:因为i不能等于1,所以直接判断第一项是否为1,是则输出YES,否则输出NO
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl "\n";
void solve()
{
int n,m,x,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
if(a[1]!=1)
puts("NO");
else
puts("YES");
return ;
}
signed main()
{
IOS
int t=1;
cin>>t;
while(t--)
solve();
return 0;
}
B. AB Flipping
给你一串字符(只包含A,B),当ai为A且ai+1为B时可以交换一次,且每个下标i只能交换一次,求最多交换几次
解析:直接正反遍历,第一遍遍历最左边第一个不为B的位置X,第二遍遍历最右边第一个不为B的位置Y,特盘全为A或者B的情况,输出max(Y-X,0)
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl "\n";
void solve()
{
int n,sum=0,flag=0,aa=0,bb=0;
cin>>n;
string x;
cin>>x;
for(int i=0;i<n;i++)
{
if(x[i]!='B')
{
aa=i;
flag=1;
break;
}
}
for(int i=n-1;i>=0;i--)
{
if(x[i]!='A')
{
bb=i;
break;
}
}
if(flag)
{
cout<<max(bb-aa,(int)0)<<endl;
}
else
cout<<"0"<<endl;
return ;
}
signed main()
{
IOS
int t=1;
cin>>t;
while(t--)
solve();
return 0;
}
C. Matching Arrays(补)
给出两个序列a和b,再给出一个魅力值k,如果ai>bi,则魅力值就加一,a序列不能变,你可以改变b序列的顺序,使魅力值等于k,如果不能输出NO,如果可以,输出YES,并且输出b改变后的序列
解析:用一个pair来储存a序列原本的值和对应下标,并排序,再将b序列排序,再开一个数组来存储答案序列,因为限定了k值,即a序列里面对应的只能比b序列大k个,所以利用模关系,将b数组的前k项按顺序补充到尾部,b数组的第k+1项对标pair(a)的第一项,补充到答案序列,然后遍历一遍,对应相比较,最后的值等于k则输出YES和答案序列,否则输出NO
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl "\n";
int a[400100],b[400100],num[400100];
void solve()
{
int n,k,x,sum=0;
vector<pair<long long,long long>> aa;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
cin>>a[i];
aa.push_back({a[i],i});
}
for(int i=0;i<n;i++)
cin>>b[i];
sort(aa.begin(),aa.end());
sort(b,b+n);
for(int i=0;i<n;i++)
{
num[aa[i].second]=b[(i+k)%n];
}
for(int i=1;i<=n;i++)
{
if(a[i]>num[i])
sum++;
}
if(sum!=k)
{
cout<<"NO"<<endl;
}
else
{
cout<<"YES"<<endl;
for(int i=1;i<=n;i++)
cout<<num[i]<<" ";
cout<<endl;
}
return ;
}
signed main()
{
IOS
int t=1;
cin>>t;
while(t--)
solve();
return 0;
}
D!!!!