• CF997C Sky Full of Stars


    CF997C Sky Full of Stars 

    计数好题

    在Ta的博客查看

    容斥式子:发现只要每个钦定方案的贡献都考虑到再配上容斥系数就是对的

    O(n^2)->O(n)

    把麻烦的i=0,j=0特殊考虑下

    剩下的,先把麻烦的东西化简干净

    然后枚举一维i,剩下的二项式定理!!!!

    #include<bits/stdc++.h>
    #define reg register int
    #define il inline
    #define fi first
    #define se second
    #define mk(a,b) make_pair(a,b)
    #define numb (ch^'0')
    #define pb push_back
    #define solid const auto &
    #define enter cout<<endl
    using namespace std;
    typedef long long ll;
    template<class T>il void rd(T &x){
        char ch;x=0;bool fl=false;
        while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
        for(x=numb;isdigit(ch=getchar());x=x*10+numb);
        (fl==true)&&(x=-x);
    }
    template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
    template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
    template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('
    ');}
    
    namespace Miracle{
    const int N=1e6+5;
    const int mod=998244353;
    int ad(int x,int y){
        return (x+y)>=mod?x+y-mod:x+y;
    }
    int qm(int x,ll y){
        int ret=1;
        while(y){
            if(y&1) ret=(ll)ret*x%mod;x=(ll)x*x%mod;y>>=1;
        }return ret;
    }
    int inv[N],jie[N];
    int C(int n,int m){
        if(n<0||m<0||n<m) return 0;
        return (ll)jie[n]*inv[m]%mod*inv[n-m]%mod;
    }
    int main(){
        int n;rd(n);
        ll ans=0;
        jie[0]=1;
        for(reg i=1;i<=n;++i) jie[i]=(ll)jie[i-1]*i%mod;
        inv[n]=qm(jie[n],mod-2);
        for(reg i=n-1;i>=0;--i) inv[i]=(ll)inv[i+1]*(i+1)%mod;
        for(reg i=1;i<=n;++i){
            ans=ad(ans,(i+1)&1?mod-(ll)C(n,i)*qm(3,(ll)n*(n-i)+i)%mod:(ll)C(n,i)*qm(3,(ll)n*(n-i)+i)%mod);
        }
        ans=ans*2%mod;
        ll sum=0;
        ll base=1;
        for(reg i=0;i<=n-1;++i){
            sum=ad(sum,(i+1)&1?mod-(ll)C(n,i)*ad(qm(ad(1,mod-base),n),mod-qm(mod-base,n))%mod:(ll)C(n,i)*ad(qm(ad(1,mod-base),n),mod-qm(mod-base,n))%mod);
            base=base*3%mod;
        }
        ans=(ans+sum*3)%mod;
        ot(ans);
        return 0;
    }
    
    }
    signed main(){
        Miracle::main();
        return 0;
    }
    
    /*
       Author: *Miracle*
    */
  • 相关阅读:
    从锅炉工到AI专家(1)
    【Offer】[47] 【礼物的最大价值】
    【Offer】[46] 【把数字翻译成字符串】
    【Offer】[45]【把数组排成最小的数】
    【Offer】[44] 【数字序列中某一位的数字】
    【Offer】[43] 【1~n整数中1出现的次数】
    【Offer】[42] 【连续子数组的最大和】
    【Offer】[41] 【数据流中的中位数】
    【Offer】[40] 【最小的K个数】
    【Offer】[39] 【数组中出现次数超过一半的数字】
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10787359.html
Copyright © 2020-2023  润新知