平衡
来源:互联网 发布:波兰式算法 编辑:程序博客网 时间:2024/04/29 00:31
平衡
时间限制: 1 Sec 内存限制: 256 MB
题目描述
下课了,露露、花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”。
这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面摆着一个尺子,尺子上摆着若干个相同的橡皮。尺子有 2n + 1 条等距的刻度线,第 n + 1 条刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合。
露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面)。于是,她又在尺子上放了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n + 1 条刻度线上都恰有一块相同质量的橡皮。“跷跷板”平衡了,露露感到很高兴。
花花觉得这样太没有意思,于是从尺子上随意拿走了k个橡皮。令她惊讶的事情发生了:尺子依然保持着平衡!
萱萱是一个善于思考的孩子,她当然不对尺子依然保持平衡感到吃惊,因为这只是一个偶然的事件罢了。令她感兴趣的是,花花有多少种拿走 k 个橡皮的方法,使得尺子依然保持平衡?当然,为了简化问题,她不得不做一些牺牲——假设所有橡皮都是拥有相同质量的质点。但即使是这样,她也没能计算出这个数目。放学后,她把这个问题交给了她的哥哥/姐姐——Hibarigasaki学园学生会会长,也就是你。当然,由于这个问题的答案也许会过于庞大,你只需要告诉她答案 mod p 的值。
输入
第一行,一个正整数,表示数据组数T(萱萱向你询问的次数)。
接下来T行,每行3个正整数n, k, p。
输出
共T行,每行一个正整数,代表你得出的对应问题的答案。
样例输入
10
6 5 10000
4 1 10000
9 6 10000
4 6 10000
5 1 10000
8318 10 9973
9862 9 9973
8234 9 9973
9424 9 9973
9324 9 9973
样例输出
73
1
920
8
1
4421
2565
0
446
2549
【数据约定】
10%的数据满足:n <= 10。
30%的数据满足:n <= 50。
50%的数据满足:n <= 1000。
另有10%的数据满足:k = 3。
在此基础上,另有10%的数据满足:p = 2。
100%的数据满足:T <= 20,1 <= n <= 10000,1 <= k <= 10,2 <= p <= 10000,且k <= 2n+1。
来源
Heoi2014day2
题解
可以将题目转化为求一个正整数的划分。
定义一个dp,f[i][j]表示数字i被划分为j个数。
考虑一种方案,如果不含有1,则可以从f[i-j][j]转移过来。若有1,则可以从f[i-j][j-1]转移过来。
因为划分后的数字上界为n,所以还需扣除f[i-n-1][j-1]。
综上,f[i][j]=f[i-j][j]+f[i-j][j-1]+f[i-n-1][j-1];
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<algorithm>#define N 100010#define ll long longusing namespace std;int T,n,m,mod,ans,f[11][N];int main(){ scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&mod); memset(f,0,sizeof(f)); if(m==1){printf("1\n");continue;} ans=0;f[0][0]=1; for(int i=1;i<=m;i++) for(int j=i;j<=n*i;j++) { if(j>=i)f[i][j]+=f[i-1][j-i]+f[i][j-i]; if(j>n) { f[i][j]-=f[i-1][j-n-1]; if(f[i][j]<0)f[i][j]+=mod; } if(f[i][j]>=mod)f[i][j]-=mod; } for(int i=1;i<m;i++) for(int j=1;j<=n*m;j++) { ans+=(ll)f[i][j]*f[m-i][j]%mod; if(m-i-1)ans+=(ll)f[i][j]*f[m-i-1][j]%mod; if(ans>=mod)ans-=mod; } printf("%d\n",ans); } return 0;}
- 平衡
- 平衡
- 【平衡】
- 平衡
- 平衡
- 质量平衡
- 平衡树
- 平衡饮食
- 灰平衡
- 负载平衡
- 找到平衡
- 平衡时间
- 平衡九进制
- 平衡法则
- 平衡树
- 直流平衡
- 平衡树
- 负载平衡
- leecode第9题
- 【springmvc+mybatis项目实战】杰信商贸-10.生产厂家停用+启用
- #import与@class的区别
- 计算机技术领域当前的的主流技术及其社会需求调查报告
- 【springmvc+mybatis项目实战】杰信商贸-11.购销合同业务
- 平衡
- 笔记二十一(综合运用——飞船)
- 对内存溢出查看heapdump文件
- 【springmvc+mybatis项目实战】杰信商贸-12.重点知识回顾
- 解答:第15周“知原理”检验题目
- 特征提取
- 【springmvc+mybatis项目实战】杰信商贸-13.购销合同列表
- 树莓派2配置opencv3和qt5
- registerListener实现过程---我是菜鸟