代码:
#include <iostream>
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n,k;
string s;
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>k;
cin>>s;
string str=s;
reverse(str.begin(),str.end());
int i;
for(i=0;i<(n+1)/2;i++)
{
if(s[i]!=str[i])
{
break;
}
}
if(i==(n+1)/2)//回文串
{
if(n%2==0)
{
if((n-2)/2>=k)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
else
{
if((n-1)/2>=k)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
}
else
{
if(i>=k)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
}
return 0;
}
#include <iostream>
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
#define N 100010
int a[N];
map<int,int>vis;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
scanf("%d %d",&n,&k);
set<int>s;
vis.clear();
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
s.insert(a[i]);
vis[a[i]]=1;
}
sort(a+1,a+1+n);
if(a[1]!=0)
{
if(vis[ceil(a[n]/2.0)]||k==0)
{
cout<<s.size()<<endl;
}
else
{
cout<<s.size()+1<<endl;
}
}
else
{
if(s.size()<a[n]+1)//b在a[n]的左边
{
int i;
for(i=2;i<=n;i++)
{
if(a[i]-a[i-1]>1)
{
break;
}
}
if(vis[ceil((a[i-1]+1+a[n])/2.0)]||k==0)
{
cout<<s.size()<<endl;
}
else
{
cout<<s.size()+1<<endl;
}
}
else
{
cout<<s.size()+k<<endl;
}
}
}
return 0;
}