codeforce 785 D. Anton and School - 2

2024-03-02 08:58
文章标签 school codeforce anton 785

本文主要是介绍codeforce 785 D. Anton and School - 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://codeforces.com/contest/785/problem/D
题意:给一堆括号,求有多少种规范的括号
假如说这样: ()( ( ) ( ( ( ())))

考虑每个括号的贡献,假如现在考虑第一个红色括号的贡献:
他的前面有 2 2 (,后面有 4 4 )
考虑只配对成1对:他的前面选 0 0 (,后面选 1 1 ),那就是 C02C14 C 2 0 ∗ C 4 1 种情况
考虑只配对成2对:他的前面选 1 1 (,后面选 2 2 ),那就是 C12C24 C 2 1 ∗ C 4 2 种情况
考虑只配对成3对:他的前面选 2 2 (,后面选 3 3 ),那就是 C22C34 C 2 2 ∗ C 4 3 种情况
那么他的贡献就只有这么多了
C02C14+C12C24+C22C34 C 2 0 ∗ C 4 1 + C 2 1 ∗ C 4 2 + C 2 2 ∗ C 4 3
也就是 k=min(n,m)i=0CinCi+1m ∑ i = 0 k = m i n ( n , m ) C n i ∗ C m i + 1
而这种阔以有范德蒙恒等式简化

#include"bits/stdc++.h"
using namespace std;
const int maxn=2e5+5;
const int MOD=1e9+7;
char s[maxn];
int sum1[maxn],sum2[maxn];
long long fac[maxn]={1,1},inv[maxn]={1,1};
long long ksm(long long a,long long b,long long mod)
{long long res=1,base=a;while(b){if(b&1)res=(res*base)%mod;base=(base*base)%mod;b>>=1;}return res;
}
long long C(int n,int m)
{long long res=fac[n]*inv[m]%MOD;res=res*inv[n-m]%MOD;return res;
}
int main()
{for(int i=2;i<=200000;i++){fac[i]=(long long)i*fac[i-1]%MOD;inv[i]=(long long)inv[i-1]*ksm(i,MOD-2,MOD)%MOD;}
//    cout<<C(10,5)<<endl;while(cin>>s){memset(sum1,0,sizeof(sum1));memset(sum2,0,sizeof(sum2));int len=strlen(s);for(int i=1,j=len;i<=len;i++,j--){sum1[i]=sum1[i-1];if(s[i-1]=='(')sum1[i]++;sum2[j]=sum2[j+1];if(s[j-1]==')')sum2[j]++;}long long res=0;for(int i=1;i<=len;i++){if(s[i-1]=='('){res+=C(sum1[i]+sum2[i]-1,sum2[i]-1);if(res>MOD)res-=MOD;}}cout<<res<<endl;}
}

这篇关于codeforce 785 D. Anton and School - 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765581

相关文章

Codeforces Round #329 (Div. 2) B. Anton and Lines ([好题] 计算直线在区间是否有交点)

题目链接 题意:给出n个条直线,然后在指定的区间(x1,x2)是否有直线的交点存在。 解法:一:闭区间,首先把区间略微调小。 二:计算直线在x1,x2上的交点y坐标,以及直线的id,然后按照y值,id值排序,最后判断第x1,x2左右两边的第i个点是不是同一直线的,如果不是,就存在交点。 #include<bits/stdc++.h>using namespace std;const i

codeforce 9C(Hexadecimal's Numbers)

来   看谁的代码短 C. Hexadecimal's Numbers time limit per test 1 second memory limit per test 64 megabytes input standard input output standard output One beautiful July morning

codeforce 7C 拓展欧几里得 详解

比如说  ax+by=gcd(a,b) 假设  excgcd(int a,int  b,int&x,int&y)是求解这个方程的函数 其返回值是gcd(a,b)(ps: a和b的最大公因子) 假设我们已经求得了b*x1+(a%b)*y1=gcd(a,b); x1 ,y1即为其解 又有  a%b=a-(a/b)*b; 带入得 a*y1+b*(x1-(a/b))=gcd(a,b); 而

Codeforce 963

CF 963 B 模拟加贪心 偶数个数C 模拟+前缀和 灯能否全亮D 二分+DP 中位数尽可能大F1 模拟+镜像 题目链接 B 模拟加贪心 偶数个数 考点:贪心 思路:除了全是偶数的情况,其他的情况都需要将偶数转换为奇数。最少的操作步数是偶数个数,如果有一步操作执行之前最小的偶数都比最大的奇数大,则操作步数要加1,即最后结果是偶数个数+1. 代码1: t = int(

Codeforce 214 Div 2 B.Hometask

题目描述: Description Furik loves math lessons very much, so he doesn't attend them, unlike Rubik. But now Furik wants to get a good mark for math. For that Ms. Ivanova, his math teacher, gave him a

Codeforces 443A Anton and Letters(水题)

题目链接:Codeforces 443A Anton and Letters 题目大意:给出一个字母的集合,问说有多少个不同的元素。 解题思路:水题。 #include <cstdio>#include <cstring>const int N = 1005;int n, v[N];char s[N];int main () {int ans = 0;memset(v, 0, si

Datacamp 笔记代码 Machine Learning with the Experts: School Budgets 第三章 Improving your model

更多原始数据文档和JupyterNotebook Github: https://github.com/JinnyR/Datacamp_DataScienceTrack_Python Datacamp track: Data Scientist with Python - Course 22 (3) Exercise Instantiate pipeline In order to mak

Datacamp 笔记代码 Machine Learning with the Experts: School Budgets 第二章 Creating a simple first model

更多原始数据文档和JupyterNotebook Github: https://github.com/JinnyR/Datacamp_DataScienceTrack_Python Datacamp track: Data Scientist with Python - Course 22 (2) Exercise Setting up a train-test split in scik

codeforce

http://codeforces.com/problemset/submit 学号  杭电密码

CodeForce #429 DIV2 A B C题解

A:http://codeforces.com/contest/841/problem/A 题意:n个气球分给k个人,是否有这样的解:每个人手里的气球都颜色不重复 思路:个数最多的颜色个球的个数 >k, 就必然有人手里两个球 #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>usin