[CSP-S模拟测试]:chess(数学)
题目描述
$dirty$在一个棋盘上放起了棋子。
棋盘规格为$n\times m$,他希望任意一个$n\times n$的区域内都有$C$个棋子。$dirty$很快就放置好了一个满足条件的棋盘方案,但是他认为这样过于简单了,他希望知道有多少个满足条件的方案。
输入格式
输入三个整数$n,m,C$,含义如题所述。
输出格式
输出一行一个整数,表示答案对$10^9+7$取模的结果。
样例
样例输入:
2 3 1
样例输出:
6
数据范围与提示
对于$20\%$的数据,$n,K\leqslant 4$;
对于另外$20\%$的数据,$m=n$;
对于另外$20\%$的数据,$n\leqslant 50$;
对于$100\%$的数据,$1\leqslant n\leqslant 100$;$1\leqslant m\leqslant 10^{18}$;$1\leqslant C\leqslant n^2$
题解
又没有打正解……
设$dp[i][j]$表示第$i$列放了$j$个的方案数。
$m$很大,显然不能爆扫,所以还要乘上系数,那么式子就变成了:
$$dp[i][j]=\sum \limits_{k=0}^j (C_n^{j-k})^{\frac{m}{n}}\times dp[i-1][k]$$
初值$dp[0][0]=1$。
预处理系数最有时间复杂度为:$\Theta(n\times c^2)$的。
又因为选$c$个和选$n^2-c$个的方案数是一样的,所以我们可以用这种方式优化。
但是$n=m$的点还是需要特判。
时间复杂度:$\Theta(n\times c^2)$。
期望得分:$60$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int n,c;
long long m;
long long C[1001][1001];
long long dp[1001][10001],wzc[1001][10001];
long long jc[10001],inv[10001];
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
void pre_work()
{
C[0][0]=1;
for(int i=1;i<=n;i++)
{
C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
jc[0]=1;
for(long long i=1;i<=n*n;i++)
jc[i]=(jc[i-1]*i)%mod;
inv[n*n]=qpow(jc[n*n],mod-2);
for(long long i=n*n;i;i--)
inv[i-1]=inv[i]*i%mod;
}
long long get_C(long long x,long long y){return ((jc[x]*inv[y])%mod*inv[x-y])%mod;}
long long lucas(long long x,long long y)
{
if(!y)return 1;
return (get_C(x%mod,y%mod)*lucas(x/mod,y/mod))%mod;
}
int main()
{
scanf("%d%lld%d",&n,&m,&c);
pre_work();
if(n==m)
{
printf("%lld",lucas(n*n,c));
return 0;
}
if(n*n<c*2)c=n*n-c;
for(int i=1;i<=n;i++)
{
long long flag=m/n;
if(i<=m%n)flag++;
flag%=(mod-1);
for(int j=0;j<=c;j++)
dp[i][j]=qpow(C[n][j],flag);
}
wzc[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=c;j++)
for(int k=0;k<=j;k++)
wzc[i][j]=(wzc[i][j]+wzc[i-1][k]*dp[i][j-k]%mod)%mod;
printf("%lld",wzc[n][c]);
return 0;
}
rp++
[CSP-S模拟测试]:chess(数学)的更多相关文章
- [CSP-S模拟测试]:chess(搜索+最短路)
题目描述 $pig$在下象棋的时候特别喜欢用马,他总是计算着自己的马还需要几步才能吃掉对方的帅,以及方案数的个数,当然$pig$很笨,所以他只能求助于你.我们假设在$n\times m$的棋盘上,$p ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- 0823NOIP模拟测试赛后总结
考了两场感觉虚了... NOIP模拟测试30 分着考的. 就只有T2的美妙的暴力拿分了,60分rank10,挂了. T1是一道sb题,爆零了十分遗憾. 许多人都掉进了输出格式的坑里,C没大写.少个空格 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- 安装nginx python uwsgi环境 以及模拟测试
uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...
- 【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1& ...
- 利用Python中的mock库对Python代码进行模拟测试
这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下 ...
随机推荐
- 2019 java学习 第二周总结
新学期,新气象,新老师,不同的语言学习. 我已经荒废了大一,感觉自己在大一根本没学啥,可能是自己太贪玩了,导致自己学的不精,自己对其他的见解很少. 也有自大的原因,导致自己一直浮在水平面,有实力,有耐 ...
- 路由器桥接时,为什么要关闭 DHCP 服务器?
问:看网上的一些教程,路由器设置无线桥接的时候,副路由器中的 DHCP 服务器需要关闭,请问这是为什么? 答:两个路由器无线桥接时,之所以要关闭副路由器的 DHCP 服务器,是为了避免 IP 地址错误 ...
- [转帖]又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控
又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控 https://www.cnbeta.com/articles/tech/850525.htm 不知道是不是有一起汉芯事件 国产CP ...
- JSP页面读取数据中的数据内容,出现乱码现象的解决方法
1.首先要确保JSP页面的编码已修改为“utf-8”的字符编码: 2.然后再在jsp页面上添加代码进行设置: 先用getBytes()方法读出数据,然后再new String()方法设置格式为“utf ...
- steps 步骤条、时间轴
steps 步骤条.时间轴:http://www.fxss5201.cn/project/plugin/steps/1.0/ Github地址:https://github.com/fxss5201/ ...
- 基于bs4库的HTML标签遍历方法
基于bs4库的HTML标签遍历方法 import requests r=requests.get('http://python123.io/ws/demo.html') demo=r.text HTM ...
- Tarjan水题系列(2):HNOI2012 矿场搭建
题目: 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后 ...
- IDEA 增加对JPA的支持 执行JPQL语句
IDEA 可以在控制台console中执行JPQL语句: 1. 在已存在的项目中选择项目结构: 2. 选择模块-指定实体所在的模块-选择上面的号 2. 选择要添加的模块:我们使用的是JPA,也可能有的 ...
- Python multiprocessing使用详解
multiprocessing包是Python中的多进程管理包. 与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程. 该进程可以运行在 ...
- 如何学习ios(摘自知乎https://www.zhihu.com/question/20016551)
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Wang Hailong链接:https://www.zhihu.com/question/20016551/answer/1 ...