[noi239]count
将每一个ai表示为$ai=ki\cdot m+ri$,即满足$m\sum ki+\sum ri=n$且$0<ri<m$
枚举$S=\sum ri$(S范围是$k\le S\le k(m-1)$且与n同余,只有k个值),之后相当于让$\sum ki=(n-S)/m$,根据插板法以$o(k)$(c的定义)计算
还要计算出$\sum ri=S$的方案数,设f(i)表示有i个j满足$m\le rj$,其余无限制的方案数,那么答案就是$\sum_{i=0}^{k}(-1)^k\cdot f(k)$
f(i)的计算很简单,先是从k个数中选取i个,即c(k,i);再将不满足的rj都减去m-1,即有n个数的和为$S-(m-1)i$的方案数,也用插板法,但可以o(1)计算(预处理阶乘即逆元)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 998244353
4 #define ll long long
5 #define N 25000005
6 int m,k,ans,fac[N],inv[N];
7 ll n;
8 int c1(ll n,int m){
9 int ans=1;
10 for(int i=0;i<m;i++)ans=1LL*(n-i)%mod*ans%mod;
11 return 1LL*ans*inv[m]%mod;
12 }
13 int c2(int n,int m){
14 if (n<m)return 0;
15 return 1LL*fac[n]*inv[m]%mod*inv[n-m]%mod;
16 }
17 int f(int n){
18 int p=-1,ans=0;
19 for(int i=0;i<=k;i++){
20 p*=-1;
21 ans=(ans+1LL*p*c2(k,i)*c2(n-(m-1)*i-1,k-1)%mod+mod)%mod;
22 }
23 return ans;
24 }
25 int main(){
26 scanf("%lld%d%d",&n,&m,&k);
27 fac[0]=inv[0]=inv[1]=1;
28 for(int i=1;i<=k*m;i++)fac[i]=1LL*fac[i-1]*i%mod;
29 for(int i=2;i<=k*m;i++)inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
30 for(int i=1;i<=k*m;i++)inv[i]=1LL*inv[i-1]*inv[i]%mod;
31 for(int i=0;i<k;i++){
32 int j=i*m+n%m;
33 if ((j<k)||(k*(m-1)<j))continue;
34 ans=(ans+1LL*c1((n-j)/m+k-1,k-1)*f(j))%mod;
35 }
36 printf("%d",ans);
37 }
[noi239]count的更多相关文章
- nodejs api 中文文档
文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...
- C#中Length和Count的区别(个人观点)
这篇文章将会很短...短到比你的JJ还短,当然开玩笑了.网上有说过Length和count的区别,都是很含糊的,我没有发现有 文章说得比较透彻的,所以,虽然这篇文章很短,我还是希望能留在首页,听听大家 ...
- [PHP源码阅读]count函数
在PHP编程中,在遍历数组的时候经常需要先计算数组的长度作为循环结束的判断条件,而在PHP里面对数组的操作是很频繁的,因此count也算是一个常用函数,下面研究一下count函数的具体实现. 我在gi ...
- EntityFramework.Extended 实现 update count+=1
在使用 EF 的时候,EntityFramework.Extended 的作用:使IQueryable<T>转换为update table set ...,这样使我们在修改实体对象的时候, ...
- 学习笔记 MYSQL报错注入(count()、rand()、group by)
首先看下常见的攻击载荷,如下: select count(*),(floor(rand(0)*2))x from table group by x; 然后对于攻击载荷进行解释, floor(rand( ...
- count(*) 与count (字段名)的区别
count(*) 查出来的是:结果集的总条数 count(字段名) 查出来的是: 结果集中'字段名'不为空的记录的总条数
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
- [LeetCode] Count Numbers with Unique Digits 计算各位不相同的数字个数
Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Examp ...
- [LeetCode] Count of Range Sum 区间和计数
Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...
随机推荐
- postgresql高可用集群部署
一.概况 1.概念 pgsql高可用集群采用postgresql+etcd+patroni+haproxy+keepalived等软件实现,以postgresql做数据库,etcd存储集群状态,pat ...
- 阿里云 Serverless 再升级,从体验上拉开差距
差距都在细节上. Serverless 要成就云计算的下一个 10 年,不仅需要在技术上持续精进,也需要在产品体验上精耕细作. 近日,阿里云 Serverless 再度升级,发布了一系列围绕产品体验方 ...
- 自定义view---仪表盘--kotlin
我们知道一个自定义view一般来说需要继承view或者viewGroup并实现onMeasure, onLayout, onDraw方法. 其中onMeasure用于测量计算该控件的宽高, onLay ...
- InstallScript脚本语言基本知识(一)
1.自定义函数 1 //函数的声明:prototype 返回值 函数名(形参类型1,...) 2 export prototype STRING GetPreDir(STRING); 3 4 //函数 ...
- 题解 「2017 山东一轮集训 Day7」逆序对
题目传送门 Description 给定 $ n, k $,请求出长度为 $ n $ 的逆序对数恰好为 $ k $ 的排列的个数.答案对 $ 10 ^ 9 + 7 $ 取模. 对于一个长度为 $ n ...
- PTA实验7-2-3 求矩阵的局部极大值 (15分)
实验7-2-3 求矩阵的局部极大值 (15分) 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值.本题要求给定矩阵的全 ...
- 【转】对于编译程序时出现“Deprecated declaration ultrasonic_Init - give arg types”的解决办法
编译程序时出现"Deprecated declaration ultrasonic_Init - give arg types"中文释义:给定函数的参数的类型过时, 解决办法: 在 ...
- Shadertoy 教程 Part 1 - 介绍
Note: This series blog was translated from Nathan Vaughn's Shaders Language Tutorial and has been au ...
- 什么是Sprint计划?
Sprint 计划是Scrum框架中的一个事件,团队将确定他们将在冲刺期间处理的产品积压项目,并讨论他们完成这些产品积压项目的初始计划. 团队可能会发现建立冲刺目标很有帮助,并以此为基础确定他们在冲刺 ...
- aritest发送测试报告到邮件
#!/usr/bin/env python # -*- coding=utf-8 -*- __CreateAt__ = '2020/4/19-17:34' import shutil from air ...