zoukankan      html  css  js  c++  java
  • Codeforces 785D

    原题链接:http://codeforces.com/contest/785/problem/D

    题意:有一行包含 “(”与“)”的字符串,若删去其中几个“(”和“)”得到形如“()”、“(())”的字符串,这种字符串叫做RSBS串。

    每一种不同的删法得到一个不同的RSBS串,问有几个不同的RSBS串

    思路:(官方解法)从左往右遍历每一个括号,对于每一个“(”,假设其左边(包括它)有x个“(”,右边有y个“)”,则方案数有

    用范德蒙行列式把上式化成:即可

    AC代码:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<string>
     5 using namespace std;
     6 const int mod=1e9+7;
     7 const int MAXN=4e5+10;
     8 int pre1[MAXN],pre2[MAXN];
     9 long long fac[MAXN],inv[MAXN];
    10 long long Pow(long long a, long long p){
    11     a%=mod;
    12     long long ans=1;
    13     while(p){
    14         if(p&1) ans=ans*a%mod;
    15         a=a*a%mod;
    16         p>>=1;
    17     }
    18     return ans;
    19 } 
    20 void init(){
    21     fac[0]=1;
    22     inv[0]=1;
    23     for(int i=1;i<MAXN;i++){
    24         fac[i]=fac[i-1]*i%mod;    
    25         inv[i]=Pow(fac[i], mod-2);
    26     }
    27     return;
    28     
    29 }
    30 long long cal(int m, int n){
    31     if(m<n||m<0) return 0;
    32     long long res=fac[m]*inv[m-n]%mod*inv[n]%mod;
    33     //cout<<res<<endl;
    34     return res;
    35 }
    36 int main()
    37 {
    38     string str;
    39     cin>>str;
    40     int len=str.length();
    41     int l=0,r=0;
    42     init();
    43     memset(pre1, 0, sizeof(pre1));
    44     memset(pre2, 0, sizeof(pre2));
    45     for(int i=0;i<len;i++){
    46         if(str[i]==')') r++;
    47     }
    48     int p1, p2;
    49     long long ans=0;
    50     for(int i=0;i<len;i++){
    51         if(str[i]==')') r--;
    52         else
    53         {
    54             ans=(ans+cal(l+r, l+1))%mod;
    55             l++;
    56         }
    57         cout<<ans<<endl;
    58     }
    59     printf("%I64d
    ", ans);
    60 }

    i=0min(x.y1)CxiCy1i

  • 相关阅读:
    Git和SVN之间的五个基本区别
    如何成为一名程序员:我的道路
    产品经理要懂多少技术?
    Unix哲学相关资源汇总
    Android.mk简介
    Android 中的 Service 全面总结
    获取Map集合中数据的方法
    少编码多思考:代码越多 问题越多
    【自定义Android带图片和文字的ImageButton】
    Android task process thread 进程与线程
  • 原文地址:https://www.cnblogs.com/MasterSpark/p/7613355.html
Copyright © 2011-2022 走看看