BZOJ5306 [Haoi2018]染色


Solution

xzz的博客

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
const int N=500010,Mod=1004535809,G=3;
int r[N],fac[10000010],n,m,s,W[N],a[N],b[N];
int qpow(int a,int b){int ret=1;while(b){if(b&1)ret=(ll)ret*a%Mod;a=(ll)a*a%Mod;b>>=1;}return ret;}
void NTT(int limit,int type,int *A)
{
    for(int i=0;i<limit;i++)if(i<r[i])swap(A[i],A[r[i]]);
    for(int i=1;i<limit;i<<=1)
    {
        int gn=qpow(G,(Mod-1)/(i<<1));
        for(int j=0;j<limit;j+=(i<<1))
        {
            int g=1;
            for(int k=0;k<i;k++,g=(ll)g*gn%Mod)
            {
                int t1=A[j+k],t2=(ll)g*A[i+j+k]%Mod;
                A[j+k]=(t1+t2)%Mod;A[i+j+k]=(t1-t2+Mod)%Mod;
            }
        }
    }
    if(type==-1)
    {
        int inv=qpow(limit,Mod-2);reverse(A+1,A+limit);
        for(int i=0;i<limit;i++)A[i]=(ll)A[i]*inv%Mod;
    }
}
int C(int n,int m)
{
    return (ll)fac[n]*qpow(fac[m],Mod-2)%Mod*qpow(fac[n-m],Mod-2)%Mod;
}
int main()
{
    n=gi();m=gi();s=gi();
    for(int i=0;i<=m;i++)W[i]=gi();
    fac[0]=1;
    for(int i=1;i<=max(n,m);i++)
        fac[i]=(ll)fac[i-1]*i%Mod;
    int lim=min(m,n/s);
    int limit=1,l=0;
    while(limit<(lim+1<<1))limit<<=1,l++;
    for(int i=0;i<limit;i++)
        r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
    for(int i=0;i<=lim;i++)
        a[i]=(ll)fac[i]*C(m,i)%Mod*fac[n]%Mod*qpow(m-i,n-i*s)%Mod*qpow((1ll*fac[n-i*s]*qpow(fac[s],i)%Mod),Mod-2)%Mod;
    for(int i=0;i<=lim;i++)
    {
        b[i]=qpow(fac[lim-i],Mod-2);
        if((lim-i)&1)b[i]=Mod-b[i];
    }
    NTT(limit,1,a);
    NTT(limit,1,b);
    for(int i=0;i<limit;i++)a[i]=1ll*a[i]*b[i]%Mod;
    NTT(limit,-1,a);
    int ans=0;
    for(int i=0;i<=lim;i++)
        ans=(ans+(ll)W[i]*a[lim+i]%Mod*qpow(fac[i],Mod-2)%Mod)%Mod;
    printf("%d\n",ans);
    return 0;
}

【BZOJ5306】 [Haoi2018]染色的更多相关文章

  1. [BZOJ5306] [HAOI2018]染色(容斥原理+NTT)

    [BZOJ5306] [HAOI2018]染色(容斥原理+NTT) 题面 一个长度为 n的序列, 每个位置都可以被染成 m种颜色中的某一种. 如果n个位置中恰好出现了 S次的颜色有 K种, 则小 C ...

  2. BZOJ5306 HAOI2018染色(容斥原理+NTT)

    容易想到枚举恰好出现S次的颜色有几种.如果固定至少有i种恰好出现S次,那么方案数是C(M,i)·C(N,i*S)·(M-i)N-i*S·(i*S)!/(S!)i,设为f(i). 于是考虑容斥,可得恰好 ...

  3. [BZOJ5306][HAOI2018]染色

    bzoj luogu Description 给一个长度为\(n\)的序列染色,每个位置上可以染\(m\)种颜色.如果染色后出现了\(S\)次的颜色有\(k\)种,那么这次染色就可以获得\(w_k\) ...

  4. BZOJ5306 [HAOI2018]染色 【组合数 + 容斥 + NTT】

    题目 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 \(N\) 的序列, 每个位置都可以被染成 \(M\) 种颜色中的某一种. 然而小 C 只 ...

  5. [BZOJ5306][HAOI2018]染色(容斥+FFT)

    https://www.cnblogs.com/zhoushuyu/p/9138251.html 注意如果一开始F(i)中内层式子中j枚举的是除前i种颜色之外还有几种出现S次的颜色,那么后面式子就会难 ...

  6. 【BZOJ5306】[HAOI2018]染色(NTT)

    [BZOJ5306]染色(NTT) 题面 BZOJ 洛谷 题解 我们只需要考虑每一个\(W[i]\)的贡献就好了 令\(lim=min(M,\frac{N}{S})\) 那么,开始考虑每一个\(W[i ...

  7. BZOJ 5306 [HAOI2018] 染色

    BZOJ 5306 [HAOI2018] 染色 首先,求出$N$个位置,出现次数恰好为$S$的颜色至少有$K$种. 方案数显然为$a_i=\frac{n!\times (m-i)^{m-i\times ...

  8. [洛谷P4491] [HAOI2018]染色

    洛谷题目链接:[HAOI2018]染色 题目背景 HAOI2018 Round2 第二题 题目描述 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度 ...

  9. 【LG4491】[HAOI2018]染色

    [LG4491][HAOI2018]染色 题面 洛谷 题解 颜色的数量不超过\(lim=min(m,\frac nS)\) 考虑容斥,计算恰好出现\(S\)次的颜色至少\(i\)种的方案数\(f[i] ...

随机推荐

  1. jsvascript null,undefined,undeclared的区别

    1.undefined表示"缺少值",就是此处应该有一个值,但是还没有定义,转为数值时为NaN.典型用法是: (1)变量被声明了,但没有赋值时,就等于undefined. (2) ...

  2. iOS11 适配

    参考:http://kisscu.com/2018/07/01/%E9%80%82%E9%85%8Dios-11%E6%80%BB%E7%BB%93/ self.navigationItem.righ ...

  3. 兼容ie透明书写

    filter:alpha(opacity=0); opacity:0;filter:alpha(opacity=70); opacity:0.7;

  4. git .gitignore未生效

    添加进.gitignore的问题未生效. .gitignore只会忽略在.gitignore编写之后的未跟踪(untrack)文件,而在编写.gitignore之前已经add and commit的文 ...

  5. 2018.11.07 NOIP训练 lzy的游戏(01背包)

    传送门 考虑对于每次最后全部选完之后剩下的牌的集合都对应着一种构造方法. 一个更接地气的说法: 设消耗的牌数为ttt,如果使用的牌的lll值之和也为ttt,则对应着一种构造方式让这种情形成立. 于是做 ...

  6. mac os下 android studio真机调试

    http://www.cnblogs.com/developer-wang/p/6719555.html 如果没有 .bash_profile 只需要创建 .bash_profile,然后增加andr ...

  7. MYSQL 事务测试

    mysql 事务测试 创建张表 lock1 增加字段 id,name . 增加两条记录 1,a 2,b 启动第一个会话 BEGIN; update lock1 set name='c' where i ...

  8. Jquery 单击_双击_鼠标经过_鼠标离开_背景样式变化

    列表页点击.鼠标经过离开背景变化 <script type="text/javascript"> $(function () { $("table tr&qu ...

  9. 20) maven 项目结构:all in one

    这是最常见的项目结构 垂直结构 也是初学者常用的 也是小项目常用的 优点 全部代码在一个项目里,一目了然. 结构简单易于理解 一开始时小巧 缺点 随之而来的缺点也十分明显 前端项目,后端项目,接口项目 ...

  10. Ng第十九课:总结(Conclusion)

    19.1  总结和致谢 欢迎来到<机器学习>课的最后一段视频.我们已经一起学习很长一段时间了.在最后视频中,我想快速地回顾一下这门课的主要内容,然后简单说几句想说的话. 作为这门课的结束时 ...