#include
#include
using namespace std;
char c[200];
void solve()
{
int n, k;
scanf("%d%d", &n, &k);
getchar();
scanf("%s", c+1);
int cnt = 0;
for(int i = 1; i <= n / 2; i++){//两边对称的字母个数>=k就可以
if(c[i] == c[n-i+1])
cnt++;
//需要连续对称
else
break;
}
if(cnt >= k && k * 2 + 1 <= n){
printf("YES\n");
}
else{
printf("NO\n");
}
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
solve();
return 0;
}
#include
#include
using namespace std;
const int N = 1e5 + 10;
int a[N];
void solve()
{
int n, k;
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
if(k == 0){
printf("%d\n", n);
return;
}
int maxn = *max_element(a + 1, a + n + 1);
sort(a + 1, a + n + 1, less<int>());
int mex = n + 1;
for(int i = 1; i <= n; i++){
if(i-1 != a[i]){
mex = i - 1;
break;
}
}
int mid;
if(maxn >= mex){
mid = (maxn + mex + 1) / 2;
int flag = 1;
for(int i = 1; i <= n; i++){
if(a[i] == mid){
flag = 0;//原集合中有这个元素
break;
}
}
printf("%d\n", n + flag);
}
else{
printf("%d\n", n + k);
}
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
solve();
return 0;
}
参考代码:
#include
#include
using namespace std;
const int N = 1e5 + 10;
typedef long long ll;
ll a[N], b[N];
void solve()
{
int n;
scanf("%d", &n);
int cntx, cnty;
cntx = cnty = 1;
for(int i = 1; i <= 2*n; i++){
int x, y;
scanf("%d%d", &x, &y);
if(x == 0){
a[cnty++] = abs(y);
}
else{
b[cntx++] = abs(x);
}
}
sort(a + 1, a + n + 1);
sort(b + 1, b + n + 1);
double ans = 0.00;
for(int i = 1; i <= n; i++)
{
ans += sqrt(a[i]*a[i] + b[i] * b[i]);
}
printf("%.10f\n", ans);
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
solve();
return 0;
}