2018 青岛ICPC区域赛 C Flippy Sequence

A Flippy Sequence
题意: 给出A和B两个01串,通过两次反转使得A串变成B串,问有多少种方法(这个反转指的是连续的一段区间)
分析: 分类讨论

  1. 两个串一样: 共有 n(n+1) 种
  2. 一个区间不一样:这个比较坑了,样例给的没有这种情况,坑了不少人,[a,b] 区间不一样,那么共有(b-a+a-1+n-b)*2种方法
  3. 两个区间不一样: 6种方法
  4. 三个及三个以上
const int  maxn = 1e6+10;
char ar[maxn],br[maxn];
int main(void)
{
    int T;
    cin>>T;
    while(T--){
        int n;
        scanf("%d",&n);
        scanf("%s",ar+1);
        scanf("%s",br+1);
        int cnt,l,r;
        cnt = l = r = 0;
        bool sign = 0;
        for(int i = 1;i <= n; ++i){
            if(ar[i] == br[i] && !sign) continue;
            if(ar[i] != br[i] &&  sign) continue;
            if(ar[i] == br[i] &&  sign) {
                r = i-1;
                sign = false;
                continue;
            }
            if(ar[i] != br[i] && !sign) {
                cnt++;
                l = i;
                sign = true;
                continue;
            }
        }
        if(cnt >= 3){
            printf("0\n");
        }
        else if(cnt == 2){
            printf("6\n");
        }
        else if(cnt == 1){
            int ans = 0;
            ans += (r-l);
            ans +=  l-1+n-r;
            printf("%d\n",ans*2);
        }
        else if(cnt == 0){
            printf("%lld\n",1ll*n*(n+1)/2 );
        }
    }    

   return 0;
}
全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
12-01 12:34
已编辑
广东工业大学 Java
如题,fw🐭🐭,加上准备的太晚,大三上已找不到日常实习,导致连锁反应,下学期的暑期实习找不到好的实习,导致秋招找不到中大厂,现在是中小厂Java还有考公的选择,由于有些中小厂工作强度比肩大厂,钱还少,感觉不如考公如果🐮u们是我现在这种情况,会怎么选?
负债的混子:关注你一段时间了,突然发现你头像名字都改了,想必是这段时间压力很大。关于就业还是考公的选择,就像很多牛友说的:不要美化自己没走过的路。你现在想往互联网发展,发现这条路很难走,然后想往考公发展,但是你没走过考公这条路,所以你不知道这条路的压力如何。你今年大三了,还有时间给你做选择,我希望你能够尽快的决定自己的方向,然后一条路走到黑,而不是在这里徘徊,每个人的道路是不一样的,你无法复刻别人的路,你能做的就是尽力的完善自己。 最后,我想说的是,加油,陌生人!
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务