A - Character Encoding HDU - 6397 - 方程整数解-容斥原理
A - Character Encoding
思路 :
隔板法就是在n个元素间的(n-1)个空中插入k-1个板,可以把n个元素分成k组的方法
普通隔板法
求方程 x+y+z=10的正整数解的个数。
添元素隔板法
求方程 x+y+z=10的非负整数解的个数。 那么 增加 3 即转化为 了普通隔板法
但是这个题呢 还有 < N 的限制 ,那么就需要去除掉 ,分出的块中 有 > = n 的情况 。
就会 有 一块 出现 > =n ,两块 > =n 等等。。 具体 需要根据总数来确定 ,要去除这些情况贡献的解
发现 如果 有某一块 > = n 那么就转化为了 先把n个 放到 某一块上 ,剩下的 总数 - n 再 进行 分为 m块的 分配,
计算式即为 。 某一块 * (剩下的 分到 m块上) 但是这样会多减去一些,因为 这些情况中包含了
有 两块 > = n 三块 > =n 等等 。所以 需要 加回来 两块的情况,
#include<bits/stdc++.h>
using namespace std;
#define maxn 234567
#define ll long long
#define mod 998244353
ll n,m,k,inv[maxn+10],A[maxn+10],ans,t;
ll qpow(ll a,ll b)
{
ll re=1;
while(b)
{
if(b%2)
re=(re*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return re;
}
void init()
{
A[0]=inv[0]=1;
for(int i=1; i<=maxn; i++)
{
A[i]=(A[i-1]*i)%mod;
inv[i]=qpow(A[i],mod-2)%mod;
}
}
ll C(ll a,ll b)
{
if(b<a)return 0;
return (A[b]*inv[a]%mod*inv[b-a])%mod;
}
int main()
{
init();
scanf("%lld",&t);
while(t--)
{
ans=0;
scanf("%lld%lld%lld",&n,&m,&k);
if(k==0)printf("1\n");
else if(k>m*(n-1))printf("0\n");
else if(k<n) printf("%lld\n",C(m-1,m+k-1));
else
{
ll x=-1;
ans=C(m-1,m+k-1);
for(int i=1; i<=m; i++)
{
ans=(ans+C(i,m)*x%mod*C(m-1,k+m-1-i*n)%mod+mod)%mod;
x*=-1;
}
printf("%lld\n",ans);
}
}
return 0;
}
A - Character Encoding HDU - 6397 - 方程整数解-容斥原理的更多相关文章
- hdu6397 Character Encoding 隔板法+容斥原理+线性逆元方程
题目传送门 题意:给出n,m,k,用m个0到n-1的数字凑出k,问方案数,mod一个值. 题目思路: 首先如果去掉数字范围的限制,那么就是隔板法,先复习一下隔板法. ①k个相同的小球放入m个不同的盒子 ...
- hdu 6397 Character Encoding (生成函数)
Problem Description In computer science, a character is a letter, a digit, a punctuation mark or som ...
- 使用英文版eclipse保存代码,出现some characters cannot be mapped using "Cp1251" character encoding.
some characters cannot be mapped using "Cp1251" character encoding. 解决办法:方案一: eclipse-> ...
- Character Encoding tomcat.
default character encoding of the request or response body: If a character encoding is not specified ...
- Character Encoding in .NET
https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-encoding#Encodings Characters ...
- 方程整数解-2015省赛C语言A组第一题
方程整数解 方程: a^2 + b^2 + c^2 = 1000(或参见[图1.jpg])这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解.你能算出另一组合适的解吗? 请填写该解中最小的数 ...
- java.sql.SQLException: Unsupported character encoding 'utf8mb4'.
四月 12, 2017 3:47:52 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() fo ...
- some characters cannot be mapped using iso-8859-1 character encoding
Eclipse中新建一个.properties文件,如果输入中文保存时就会提示错误 Reason:some characters cannot be mapped using "ISO-88 ...
- HDU 6397 组合数学+容斥 母函数
Character Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
随机推荐
- vue this触发事件
@click="aHref(index,$event)" aHref: function(url,event){ this.$router.push(url); $(event.c ...
- Es6对象的扩展和Class类的基础知识笔记
/*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...
- Es6模块语法笔记
/** * Created by Administrator on 2017/4/15. */ /*---------------------export命令--------------------- ...
- laravel 队列发送邮件
批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间.下面讲解下Laravel中队列的使用 ...
- Java基础之多线程框架
一.进程与线程的区别 1.定义: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比 ...
- C++ Primer 笔记——异常处理
1.栈展开过程沿着嵌套函数的调用链不断查找,直到找到了与异常匹配的catch句子为止,或者也可能一直没找到匹配的catch,则程序将调用terminate,退出主函数后查找过程终止.假设找到了一个ca ...
- Google C++ 代码规范
Google C++ Style Guide Table of Contents Header Files Self-contained Headers The #define Guard For ...
- 20165206 2017-2018-2 《Java程序设计》第五周学习总结
20165206 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 内部类:支持在一个类中定义另一个类的类. 外嵌类:包含内部类的类,称为内部类的外嵌类. 匿名 ...
- 页面布局之--Font Awesome+导航
页面布局之--Font Awesome+导航 Font Awesome为您提供可缩放的矢量图标,您可以使用CSS所提供的所有特性对它们进行更改,包括:大小.颜色.阴影或者其它任何支持的效果. 下载地址 ...
- python练习册0006
第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. import re import os def get_li ...