• bzoj1856: [Scoi2010]字符串


    可以将模型抽象成在在一个n*m的的矩形上从(0, 0)走到(n, m)的方案数,并要求不能做过y = x + 1,这条直线

    考虑任何一条不合法的路径,必然经过y = x + 1,考虑(0, 0)关于y = x + 1的对称点(-1, 1),每一条从(-1, 1)到(n, m)的路径都是经过支线y = x + 1的,并且可以通过翻折建立一一对应的关系,所以答案就是C(n + m, n) - C(n + m, n - 1)

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<string>
     7 
     8 using namespace std;
     9 
    10 void setIO(const string& a) {
    11     freopen((a+".in").c_str(), "r", stdin);
    12     freopen((a+".out").c_str(), "w", stdout);
    13 }
    14 
    15 typedef long long LL;
    16 const int Mod = 20100403;
    17 
    18 LL pow(LL a, LL b, LL p) {
    19     for(LL res = 1; ; (a *= a) %= Mod) {
    20         if(b & 1) (res *= a) %= Mod;
    21         if(!(b >>= 1)) return res;
    22     }
    23 }
    24 
    25 int main() {
    26     
    27     LL n, m;
    28     cin >> n >> m;
    29     LL res = n + 1 - m;
    30     for(int i = m + 1; i <= n + m; i++) {
    31         (res *= i) %= Mod;
    32     }
    33     LL tmp = 1;
    34     for(int i = 1; i <= n + 1; i++) {
    35         (tmp *= i) %= Mod;
    36     }
    37     (res *= pow(tmp, Mod - 2, Mod)) %= Mod;
    38     
    39     cout << res << endl;
    40     
    41     return 0;
    42 }
  • 相关阅读:
    最大值和最小值
    GetLevelDesc函数
    21. D3DSprite
    SetFileAttributes和GetFileAttributes
    24. 幕外渲染
    D3D修改view矩阵与修改world矩阵的区别
    23. 保存纹理(保存屏幕截图)
    C++之solmyr小品文
    C++二进制文件写操作
    22. 凸凹贴图
  • 原文地址:https://www.cnblogs.com/showson/p/5006586.html
Copyright © 2020-2023  润新知