zoukankan      html  css  js  c++  java
  • Yali7月集训Contest2 T1 Cube 题解

    • 题目链接:

      连我们都只有纸质题目...话说雅礼集训都是这样的吗...

    • 大意

      0维基本图形是一个点

      1维基本图形是一条线段

      2维基本图形是一个正方形

      3维基本图形是一个正方体

      4维基本图形是...

      (n)维基础图形中有多少个(m)维基础图形((n>=m))并对(998244353)取模

    • 分析

      手玩样例打表吼啊

      当然还是要暗中观察一下啦

      线段变成正方形,点数变为原来两边,边数除了变为原来两倍之外还要加上原来点数所对应连起来的边

      正方形变正方体也类似

      于是我就yy出一个递推式(num[x][m]=num[x-1][m]*2+num[x-1][m-1])

      (num[x][m])表示(x)维基础图形中含有(m)维基础图形的数量

      然后我们可以打一张表

      然后就有dalao发现了规律(我比较傻考场上都手玩出每一项能整除2的幂都没发现规律)

      (num[n][m]/2^{n-m}=C^n_m)

      然后就ok了

    • 注意

      在订正这道题时发现几个值得注意的地方

      • 线性求逆元时我原来的方法不行

        原来我这么线性求逆元

    inv[i]=(-(p/i)*inv[p%i]%p);
    ```

    结果我发现数字一大就GG了
    
    这是大佬的线性求逆元
    
    ```
    

    inv[i]=(ll)(p-(p/i))*inv[p%i]%p;
    ```

    这就很稳了
    
    • 一个有趣的性质

      逆元的阶乘是原来数字阶乘的逆元

      很有趣,好象可证

    • 代码:

    include

    include

    include

    include

    include

    include

    include

    define ri register int

    define ll long long

    using namespace std;
    const int maxn=100005;
    const int inf=0x7fffffff;
    const int p=998244353;
    template inline void read(T &x){
    x=0;int ne=0;char c;
    while(!isdigit(c=getchar()))ne=c'-';
    x=c-48;
    while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
    x=ne?-x:x;
    return ;
    }
    int inv[maxn],twopow[maxn],fac[maxn];
    inline void pre(){
    inv[0]=inv[1]=1,fac[1]=1,twopow[0]=1,twopow[1]=2;
    for(ri i=2;i<=100002;i++){
    fac[i]=(ll)fac[i-1]i%p;
    inv[i]=(ll)(p-(p/i))
    inv[p%i]%p;
    twopow[i]=(ll)(twopow[i-1]<<1)%p;
    //cout<<fac[i]<<' '<<inv[i]<<' '<<twopow[i]<<endl;
    }
    for(ri i=2;i<=100002;i++){
    inv[i]=(ll)inv[i]*inv[i-1]%p;//比较神奇,逆元的阶乘是原来数的阶乘的逆元
    }
    return ;
    }
    int t;
    inline int solve(int m,int n){
    if(m
    0)return twopow[n];
    if(n==m)return 1;
    return (ll)fac[n]inv[n-m]%ptwopow[n-m]%p*inv[m]%p;
    }
    int main(){
    int n,m;
    read(t);
    pre();
    while(t--){
    read(n),read(m);
    printf("%d ",solve(m,n));
    }
    return 0;
    }
    ```

  • 相关阅读:
    Django_05_模板
    Django_04_视图
    Django_03_后台管理
    Django_02_创建模型
    Django_01_创建图书管理项目
    Djang简介
    day_03比特币转账的运行原理
    day_02比特币的转账机制及其7个名词
    day01_人类社会货币的演变
    Socket问题
  • 原文地址:https://www.cnblogs.com/Rye-Catcher/p/9275925.html
Copyright © 2011-2022 走看看