A
石子数量奇偶性不会改变
#include
using namespace std;
int main (void) {
int n;
scanf("%d", &n);
if (n & 1) printf("Xiaoyu_Chen\n");
else printf("Yitong_Qin\n");
}
B
字符串前n个相同的字符x不能被合并,答案至少为n。先把之后的x用其他字符合并,再用x把其他字符合并,最后字符串只剩前n个字符,答案为n。
#include
using namespace std;
char tex[200010];
int main (void) {
scanf("%s", tex);
for (int i = 0; tex[i+1]; i++) {
if (tex[i] != tex[i+1]) {
printf("%d", i+1);
return 0;
}
}
printf("%d\n", strlen(tex));
}
C
不难发现n = 1,2,3,4,5时无解,可以发现n = 6时有(7*7*7-7)/(7+7) = 24,n = 7时有(7+7+7)/7+7+7+7 = 24。对于n >= 8的情况,都可以由之前的可行情况加上*(7/7)得到新的可行情况。
#include
using namespace std;
int main (void) {
int n;
scanf("%d", &n);
printf("%s\n", n >= 6 ? "YES" : "NO");
}
D
最终状态为01010...或10101...。考虑达到两种状态所需代价,统计需要变成1的0和变成0的1的个数cnt1和cnt2,那么至少需要max(cnt1,cnt2)的代价。尝试将min(cnt1,cnt2)对01交换,尝试将max(cnt1,cnt2) - min(cnt1,cnt2)剩余0变成1(或是1变成0),这样只需要max(cnt1,cnt2)的代价。
#include
using namespace std;
char tex[100010];
int main (void) {
int n;
scanf("%d", &n);
scanf("%s", tex);
int cnt1 = 0, cnt2 = 0, ans;
// 010101...
for (int i = 0; i < n; i++) {
if (i & 1) cnt1 += (tex[i] != '1');
else cnt2 += (tex[i] != '0');
}
ans = max(cnt1, cnt2);
cnt1 = cnt2 = 0;
// 101010...
for (int i = 0; i < n; i++) {
if (i & 1) cnt1 += (tex[i] != '0');
else cnt2 += (tex[i] != '1');
}
ans = min(ans, max(cnt1, cnt2));
printf("%d\n", ans);
}
E
打牌。
多种思路,这里仅提供一种分类方法:
1.先手只有一张牌。
2.先手有两张牌:
2.1.后手有一或两张牌:先手打大牌让后手要不起。
2.2.后手有多张牌:后手一定由大到小打牌,打到倒数第二张被先手接上了先手就胜。
#include
using namespace std;
char a[20], b[20];
int convert (char card) {
if ('3' <= card && card <= '9') return card - '0';
else if (card == 'T') return 10;
else if (card == 'J') return 11;
else if (card == 'Q') return 12;
else if (card == 'K') return 13;
else if (card == 'A') return 14;
else if (card == '2') return 15;
}
bool check (void) {
int lena = strlen(a), lenb = strlen(b);
if (lena < 2) return true;
if (lenb == 1 && convert(b[0]) <= convert(a[1])) {
return true;
} else if (lenb == 2 && convert(b[1]) <= convert(a[1])) {
return true;
} else if (convert(b[1]) < convert(a[1])) {
return true;
}
return false;
}
int main (void) {
scanf("%s", a);
scanf("%s", b);
printf("%s\n", check() ? "zhong_wang" : "cfeitong");
}