zoukankan      html  css  js  c++  java
  • ZOJ4060 Flipping Sequence(思维)

    题意:

    给出两串01序列,一次操作可以使得一个区间l,r内的所有字符反转,要求两次操作后第一串序列变成第二串序列,询问有多少种方案?

    题解:

    先做一个异或运算,相同的为0,不同的为1,存到一个新的数组里

    如果长度为1位且相同,那么直接输出1

    如果每一位都不相同,那么方案数为(N-1)*2

    如果每一位都相同,那么方案数为N*(N+1)/2

    如果不相同的连续段数大于两段,直接输出0

    如果只有一段不相同,方案数为(N-1)*2

    如果有两段不相同,方案数为6

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e7+10;
    typedef long long ll;
    char s1[maxn],s2[maxn];
    int a[maxn];
    int T;
    int main () {
        scanf("%d",&T);
        while (T--) {
            ll ans=0;
            int N;
            scanf("%d",&N);
            scanf("%s%s",s1,s2);
            for (int i=0;i<N;i++) {
                a[i]=(s1[i]-'0')^(s2[i]-'0');
                ans+=a[i];
            }
            if (N==1&&a[0]==0) {
                printf("1
    ");
                continue;
            }
            if (ans==N) {
                printf("%lld
    ",(ll)(N-1)*2);
                continue;
            }
            if (ans==0) {
                printf("%lld
    ",(ll)N*(N+1)/2);
                continue;
            }
            ans=0;
            if (a[0]==1) ans++;
            for (int i=1;i<N;i++) {
                if (a[i]==1&&a[i-1]!=1) ans++;
                if (ans>2) break;
            }
            if (ans>2) {
                printf("0
    ");
                continue;
            }
            if (ans==1) {
                printf("%lld
    ",(ll)(N-1)*2);
            }
            if (ans==2) {
                printf("6
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    影响STA的因素-OCV
    FPGA的可靠性分析
    DFT
    Verilog 延时模型
    收缩数据库日志
    iis设置局域网访问,Context.Request.Url.Authority老是取出为localhost问题
    vs2012 后期生成事件命令报错 9009
    MIME配置
    sql 字符串拼接 =>for xml()
    js 切换embed的src值
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12505917.html
Copyright © 2011-2022 走看看