2019.7.10
Posted fanshhh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019.7.10相关的知识,希望对你有一定的参考价值。
2019.7.10
cf #571 div2 C
字符串a中与b相等长度的子串中,有多少个与b有偶数个不同的字符。(字符串只含01)
思路:cnta, cntb表示字符串的和,因为a对b只有(00)(11)(01)(10)四种情况,所以如果要存在偶数个不同,(cnta+cntb)% 2 == 0满足;
#include <cstdio>
#include <cstring>
char a[1000010], b[1000010];
int cnta[1000010];
int main()
while(~scanf("%s %s", a, b))
int n = strlen(a), m = strlen(b);
cnta[0] = a[0] - '0';
int cntb = 0;
for(int i = 0; i < m; i++)
if(b[i] == '1') cntb++;
for(int i = 1; i < n; i++)
if(a[i] == '1') cnta[i] = cnta[i-1] + 1;
else cnta[i] = cnta[i-1];
int cnt = 0;
if((cnta[m-1] + cntb) % 2 == 0) cnt++;
for(int i = m; i < n; i++)
if((cntb + cnta[i] - cnta[i-m]) % 2 == 0) cnt++;
printf("%d\n", cnt);
return 0;
cf 1152A
有n个箱子和m把钥匙,箱子的数字和钥匙的数字相加是奇数就可以打开箱子,问最多有多少个箱子可以打开,钥匙只能用一次。
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
int n, m;
while(~scanf("%d %d", &n, &m))
int ll = 0, rr = 0, l = 0, r = 0, a;
for(int i = 0; i < n; i++)
scanf("%d", &a);
if(a % 2) l++;
else r++;
for(int i = 0; i < m; i++)
scanf("%d", &a);
if(a % 2) ll++;
else rr++;
int ans = min(l, rr) + min(r, ll);
printf("%d\n", ans);
return 0;
今天没写多少题是因为今天集训打了一场cf,晚上和队友看了一个多校的比赛,太自闭了。
还有些题目忘记记录了,就算啦
以上是关于2019.7.10的主要内容,如果未能解决你的问题,请参考以下文章