zoukankan      html  css  js  c++  java
  • 【解题报告】 洛谷P1641 生成字符串

    【解题报告】 洛谷P1641 生成字符串

    题目链接

    https://www.luogu.com.cn/problem/P1641

    思路

    我们可以想象一个平面直角坐标系,或者一个格子图

    我们设左下角为 ((0,0)) 然后我们向右走是选一个1,向左走选一个0,于是我们最终要走到 ((n,m)) 这个位置

    并且我们只能在 ((0,0),(n,m)) 的连线下方走

    这样我们就可以用小学就学过的格点标记法来做了

    然后我们发现,有一些不合法的方案,然后我们设答案为 (f(n,m)) ,则有

    [f(n,m)=dfrac {n-m+1} {n+1} C_{m+n}^m ]

    然后这里的 (n,m) 比较大,所以我们预处理一下,然后利用逆元来求组合数,这是一个小技巧

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #define int long long
    using namespace std;
    const int mod=20100403;
    int n,m,ans,divi;
    void mul(int &base,int x)
    {
    	base=(base*x)%mod;
    }
    int ksm(int a,int b,int p)
    {
    	int res=1;
    	while(b)
    	{
    		if(b&1)
    		res=1ll*res%p*a%p;
    		a=1ll*a%p*a%p;
    		b>>=1;
    	}
    	return res;
    }
    signed main()
    {
    	cin>>n>>m;
    	divi=n+1,ans=divi-m;
    	for(int i=n+1;i<=n+m;i++)
    	mul(ans,i);
    	for(int i=1;i<=m;i++)
    	mul(divi,i);
    	ans=(ans*ksm(divi,mod-2,mod))%mod;
    	cout<<ans<<'
    ';
    	return 0;
    }
    
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    linux seqlock 锁
    linux 位操作
    linux 原子变量
    linux 读者/写者自旋锁
    linux自旋锁函数
    linux 自旋锁 API 简介
    linux Completions 机制
    linux 读者/写者旗标
    linux 在 scull 中使用旗标
    Linux 旗标实现
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15391475.html
Copyright © 2011-2022 走看看