首页 > Web开发 > 详细

jsc2019_qualC Cell Inversion

时间:2019-08-26 17:22:03      阅读:89      评论:0      收藏:0      [点我收藏+]

先吐槽一下这个比赛的奇怪名字

这个破名字让我实在不知道博客标题该叫啥/px

题目大意

给你一个长度为2n的序列

包括W和B

每次可以选一个区间将里面的颜色反转

但是每个点只能被作为端点选一次

问将序列全部变为W的操作方案数

分析

可以将区间左右端点看作左括号与右括号

我们发现对于W一定被偶数个区间覆盖

B一定被奇数个区间覆盖

所以如果当前区间数正好符合则填右括号

否则填左括号改变奇偶性

填每个右括号时匹配的方案数即为剩余左括号数

最终方案乘上排列方案n!即可

代码

#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
char s[200100];
int n,ans=1,num;
int main(){
    int i,j,k;
    scanf("%d",&n);
    scanf("%s",s);
    for(i=0;i<2*n;i++)
      if(!(((s[i]==W)^num)&1))num++;
        else ans=1ll*ans*num%mod,num--;
    if(num!=0){puts("0");return 0;}
    for(i=1;i<=n;i++)ans=1ll*ans*i%mod;
    printf("%d\n",ans);
    return 0;
}

jsc2019_qualC Cell Inversion

原文:https://www.cnblogs.com/yzxverygood/p/11413676.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!