目录
- A - Odd Selection
- B - Subsequence Hate
- C - Game On Leaves
A - Odd Selection
solution
题目大意:n个数,从其中选出x个数,如果和可以为奇数则输出Yes,否则输出No。
思路:先遍历一遍,分别求出奇书和偶数的个数。然后从1开始试奇数个数,因为奇数个奇数才可能为奇,所以从一开始两个两个往上加。**注意i小于总奇数的个数的同时小于x.**然后看偶数的个数能不能大于x-i。
AC_Code
#include<stdio.h>
int main()
{
int t;
int n,x,a[1000];
scanf("%d",&t);
while(t--)
{
int flag = 0;
int cnt = 0,cnt_ = 0;
scanf("%d %d",&n,&x);
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
if(a[i] % 2 != 0)
cnt++;
else
cnt_++;
}
for(int i = 1; i <= cnt && i <= x; i+=2){
if(cnt_ >= x-i)
flag = 1;
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
B - Subsequence Hate
solution
题目大意:给出一字符串,使0变成1或者使1变成0,使字符串中没有010或者101的情况。
思路:我们要使全变成0或者全变成1或者一边全是0另一边全是1。可以假设有一个分割线,从最左边开始。分割线的左边全是一个数,另一边全是另一个数。
AC_Code
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int t;
char s[1000];
scanf("%d",&t);
while(t--)
{
int cnt0 = 0,cnt1 = 0;
scanf("%s",&s);
int len = strlen(s);
for(int i = 0; i < len; i++){
if(s[i] == '0')
cnt0++;
else
cnt1++;
}
int ans = min(cnt0,cnt1);
int a0 = 0,a1 = 0;
for(int i = 0; i < len; i++){
if(s[i] == '0'){
a0++;
cnt0--;
}
else{
a1++;
cnt1--;
}
ans = min(ans,min(a0,a1)+min(cnt0,cnt1));
}
printf("%d\n",ans);
}
return 0;
}