题目

描述

你要在\(m\)天内,刷\(n\)道题,每天可以刷的题的数目不限;

第\(i\)天可以刷的题目的种类是\(ui+v\);

两种刷题的方案不同当且仅当某天刷题的数量不同或者依次刷题的种类不同;

有\(T\)组询问,每组给出\(n,m,u,v\);

范围

$1 \le T \le 5 \ , \ 1 \le n \le 10^{18} , 1 \le m \le 2 \times 10^5 , 1 \le u , v \le 10^9 $

题解

  • 典型的数学题,给出两种推导;

  • 首先答案是:

    \[\begin{align}
    & \sum_{k_1+k_2+\cdots + k_m = n} t_1^{k_1} t_2^{k_2} \cdots t_m^{k_m} , \ \ \ 其中 t_i = ui+v \\
    \end{align}
    \]

  • solve 1

    \[\begin{align}
    &以下方法的基本思路是利用组合意义推导: \\
    &Part \ 1 \\
    &考虑现在有一些球,这些球上有一个数字1 \to m; \\
    &同时这些球有颜色,其中第i(1<i<m)球标号的球有u种颜色,第m种球有u+v种颜色; \\
    &两个球相同当且仅当编号和颜色都相同; \\
    &现在用这些球构成一个n+m-1长度的序列,满足: \\
    &\ \ \ *编号为1 \to m-1的球都出现过,记他们第一次出现的位置为:1 \le p_1 , p_2 , \cdots , p_{m-1}\le n+m-1 \\
    &\ \ \ *这些球第一次出现的位置满足:1 \le p_1 \lt p_2 \lt p_3 \lt \cdots \lt p_{m-1} \le n+m-1 \\
    &Par \ 2 \\
    &先放好p_i , 考虑p_i和p_{i-1}+1中间可以放的球种类是\ ui+v \ , \ 所以计数这样子的序列是:
    \\
    &\ \ \ \ u^{m-1} \sum_{1 \lt p_1 \lt p_2 \lt \cdots \lt p_{m-1} \lt n+m-1 }(u+v)^{p_1-1} (2u+v)^{p_2-p_1-1} (3u+v)^{p_3-p_2-1} \cdots (mu+v)^{n+m-1-p_{m-1}-1}
    \\
    &前面乘上u^{m-1}是因为p_{1}到p_{m-1}都是u种颜色可选,这样也可以知式子种指数的和是(n+m-1)-(m-1)=n; \\
    &所以这个式子是答案的u^{m-1}倍,我们只需要计数序列个数除以u^{m-1}即可得到答案;\\
    &Part \ 3 \\
    &进一步前m-1种球都是等价的,所以简化条件成: \\
    &\ \ \ *编号为1 \to m-1的球都出现过; \\
    &用这个除以(m-1)!即可得到原构造序列的个数; \\
    &Part \ 4 \\
    &利用容斥算出满足简化条件的序列: \\
    &\sum_{S} (-1)^{|S|} (mu + v -|S|u) ^ {n+m-1} \\
    &=\sum_{k=0}^{m-1}(-1)^k (^{m-1}_k) (mu+v-ku)^{n+m-1} \\
    &综上:答案即是:\frac{\sum_{k=0}^{m-1}(-1)^k (^{m-1}_k) (mu+v-ku)^{n+m-1}}{(m-1)!u^{m-1}}
    \end{align}
    \]

  • solve 2

    \[\begin{align}
    &以下方法的基本思路是利用生成函数和增量去构造;\\
    &Part \ 1 \\
    &考虑答案即是:[x^n]\Pi_{i=1}^{m}\frac{1}{1-t_ix}\\
    &设G(x)=\Pi_{i=1}^{m}\frac{1}{1-t_ix}\\
    &假设G(x)有另一种有限项的形式:G(x)=\sum_{i=1}^{m}\frac{a_i}{1-t_ix}\\
    &Part \ 2 \\
    &尝试用增量法去求出系数a_i,这样我们也同时证明了这种形式的存在;\\
    &首先明确一个式子:\frac{1}{ab}=(\frac{1}{a}-\frac{1}{b})\frac{1}{b-a} &(1) \\
    &假设现在已经求出了前m-1项乘积的系数a_{m-1,1},\cdots,a_{m-1,m-1};\\
    &考虑乘上一个\frac{1}{1-t_mx} ,即:\\
    &\sum_{i=1}^{m-1}\frac{a_i}{1-t_ix}\frac{1}{1-t_mx} &(2) \\
    &带入(1),=\sum_{i=1}^{m-1}a_i(\frac{1}{1-t_ix}-\frac{1}{1-t_mx})\frac{1}{(i-m)ux} &(3)\\
    &把ux直接踢出去,最后的G'(x)乘上一个u^{m-1}x^{m-1} \\
    &所以只考虑\sum_{i-1}^{m-1}\frac{a_i}{i-m}\frac{1}{1-t_ix}+\frac{a_i}{m-i}\frac{1}{1-t_mx}\\
    &所以可以得到:\\
    &a_{i,j}=\frac{a_{i-1,j}}{j-i};(j<i)&(4)\\
    &a_{i,i}=\sum_{j=1}^{i-1}\frac{a_{i-1,j}}{i-j} &(5)\\
    &Part \ 3 \\
    &为了方便我们设f_i=a_{i,i},(4)可以被进一步写成:a_{i,j}=f_j\frac{(-1)^{i-j}}{(i-j)!} \ &(6)\\
    &把(6)带入(5)化简:\\
    &f_{i}=\sum_{j=1}^{i-1}f_j\frac{(-1)^{i-j-1}}{(i-j)!}\\
    &此时记F(x)为f_{i}的OGF,F(x)=F(x)*(1-e^{-x})+x;\\
    &解得:F(x)=xe^x;\\
    &所以f_i=[x^i]F(x)=\frac{1}{(i-1)!}; &(7) \\
    &Part 4\\
    &接下来就只需要利用(4)和(7)简单化简求答案;\\
    &ans=[x^n]G(x)\\
    &=[x^n]\frac{G'(x)}{u^{m-1}x^{m-1}} \\
    &=\frac{1}{u^{m-1}}[x^{n+m-1}]G'(x) \\
    &=\frac{1}{u^{m-1}}\sum_{k=1}^{m}a_{m,k}t_{k}^{ \ n+m-1}\\
    &=\frac{1}{u^{m-1}}\sum_{k=1}^{m}f_k\frac{(-1)^{m-k}}{(m-k)!}(uk+v)^{n+m-1}\\
    &=\frac{\sum_{k=1}^{m}\frac{(-1)^{m-k}}{(k-1)!(m-k)!}(uk+v)^{n+m-1}}{u^{m-1}}\\
    &=\frac{\sum_{k=0}^{m-1}(-1)^{k}(mu+v-ku)^{n+m-1}}{(m-k-1)!k!u^{m-1}}\\
    &=\frac{\sum_{k=0}^{m-1}(-1)^{k}(^{m-1}_k)(mu+v-ku)^{n+m-1}}{(m-1)!u^{m-1}}
    \end{align}
    \]

  • 两种方法都差不多巧妙只是第二种数学化简比较多所以看起来有点长;

  • 代码就很没意思了->_<-;

    #include<bits/stdc++.h>
    #define ll long long
    #define mod 998244353
    using namespace std;
    const int N=200010;
    ll n;
    int m,u,v,fac[N];
    int pw(int x,int y){
    int re=1;
    while(y){
    if(y&1)re=(ll)re*x%mod;
    x=(ll)x*x%mod;y>>=1;
    }
    return re;
    }
    int main(){
    freopen("ioer.in","r",stdin);
    freopen("ioer.out","w",stdout);
    int T;cin>>T;
    for(int i=fac[0]=1;i<=2e5;++i)fac[i]=(ll)fac[i-1]*i%mod;
    while(T--){
    cin>>n>>m>>u>>v;
    int y=(n+m-1)%(mod-1),x=((ll)m*u+v)%mod,c=1,ans=0;
    for(int i=0;i<=m-1;++i){
    int now = (ll)c*pw(x,y)%mod;
    if(i&1)ans=(ans-now+mod)%mod;else ans=(ans+now)%mod;
    x=(x-u+mod)%mod;
    c=(ll)(m-i-1)*pw(i+1,mod-2)%mod*c%mod;
    }
    ans=1ll*pw(fac[m-1],mod-2)*pw(u,(ll)(mod-2)*(m-1)%(mod-1))%mod*ans%mod;
    cout<<ans<<endl;
    }
    return 0;
    }

【纪中集训2019.3.23】IOer的更多相关文章

  1. 【纪中集训2019.3.23】Deadline

    题意 描述 一个二分图\((A,B)\),每个点额外有一个颜色0或者1: 匹配时,只能相同颜色的点匹配: 给出\(A\)中的颜色,问如何分配\(B\)种的颜色使得\((A,B)\)的最大匹配最小: 范 ...

  2. 【纪中集训2019.3.27】【集训队互测2018】小A的旅行(白)

    题目 描述 ​ \(0-n-1\)的图,满足\(n\)是\(2\)的整数次幂, $ i \to j $ 有 $ A_{i,j} $ 条路径: ​ 一条路径的愉悦值定义为起点和终点编号的\(and\)值 ...

  3. 【纪中集训2019.3.12】Mas的仙人掌

    题意: ​ 给出一棵\(n\)个点的树,需要加\(m\)条边,每条边脱落的概率为\(p_{i}\) ,求加入的边在最后形成图中仅在一个简单环上的边数的期望: \(1 \le n \ , m \le 1 ...

  4. 【纪中集训2019.3.11】Cubelia

    题目: 描述 给出长度为\(n\)的数组\(a\)和\(q\)个询问\(l,r\). 求区间\([l,r]\)的所有子区间的前缀和的最大值之和: 范围: $n \le 2 \times 10^5 , ...

  5. 【纪中集训2019.3.13】fft

    题意: 描述 一共有\(n+m\)道题,其中\(n\)道答案是\(A\),\(m\)道答案是\(B\): 你事先知道\(n和m\),问在最优情况下的期望答错次数,对\(998244353\)取模: 范 ...

  6. 【纪中集训2019.3.12】Z的礼物

    题意 已知\(a_{i} = \sum_{j=1}^{i} \{^{i} _{j} \}b_{j}\), 给出\(a_{1} 到 a_{n}\) : 求\(b_{l} 到 b_{r}\)在\(1e9+ ...

  7. 「中山纪中集训省选组D1T1」最大收益 贪心

    题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...

  8. 纪中集训 Day 2

    今天(其实是昨天= =)早上起来发现好冷好冷啊= = 吃完饭就准备比赛了,好吧B组难度的题总有一道不知到怎么写QAQ 太弱了啊!!! 蒟蒻没人权啊QAQ 今天第4题不会写,在这里说说吧 题目的意思就是 ...

  9. 纪中集训 Day1

    今天早上起来吃饭,发现纪中伙食真的是太差了!!!什么都不热,早餐的面包还好,然后就迎来了美好的早晨= = 早上做一套题,T1T2果断秒,T3一看就是noi原题,还好看过题解会写,然后就愉快的码+Deb ...

随机推荐

  1. i++ i+=1 i=i+1 汇编代码效率比较

    结论:一样.编译器和编译器之间可能有点区别但是程序不会变. 0x00 一直不清楚到底是因为懒还是真的为了效率,要把" i = i + 1 "写成" i++ "或 ...

  2. 基于Neutron的Kubernetes SDN实践经验之谈

    首先,向大家科普下Kubernetes所选择的CNI网络接口,简单介绍下网络实现的背景. CNI即Container Network Interface,是一套容器网络的定义规范,包括方法规范.参数规 ...

  3. Python20-Day03

    ##########文件操作相关########## 一.文件操作 文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来. 文件操作的流程: * ...

  4. mac 上面安装 tree 命令

    相信很多使用过Linux的用户都用过tree命令,它可以像windows的文件管理器一样清楚明了的显示目录结构. 但是mac下默认是没有 tree命令的. 1.我们可以使用find命令模拟出tree命 ...

  5. 硬件设计原理图Checklist 参考案例二 【转载】

    类别 描述 检视规则 原理图需要进行检视,提交集体检视是需要完成自检,确保没有低级问题. 检视规则 原理图要和公司团队和可以邀请的专家一起进行检视. 检视规则 第一次原理图发出进行集体检视后所有的修改 ...

  6. React的setState分析

    前端框架层出不穷,不过万变不离其宗,就是从MVC过渡到MVVM.从数据映射到DOM,angular中用的是watcher对象,vue是观察者模式,react就是state了. React通过管理状态实 ...

  7. 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

    实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http: ...

  8. Leetcode题库——35.搜索插入位置

    @author: ZZQ @software: PyCharm @file: searchInsert.py @time: 2018/11/07 19:20 要求:给定一个排序数组和一个目标值,在数组 ...

  9. 第二章 Socket用法详解

    构造Socket Socket构造方法如下: Socket() //Creates an unconnected socket, with the system-default type of Soc ...

  10. Maven解读:强大的依赖体系

    Github地址:https://github.com/zwjlpeng/Maven_Detail Maven最大的好处就是能够很方便的管理项目对第三方Jar包的依赖,只需在Pom文件中添加几行配置文 ...