代码:
#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; }