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的主要内容,如果未能解决你的问题,请参考以下文章

2019.7.10 校内测试题 转圈游戏

对于缺少Mac必备神器的小伙伴 怎么在618大促时候薅羊毛

高德API实现的实时运动轨迹