题目描述

  $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$分。


代码时刻

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int mod=1000000007;
  4. int n,c;
  5. long long m;
  6. long long C[1001][1001];
  7. long long dp[1001][10001],wzc[1001][10001];
  8. long long jc[10001],inv[10001];
  9. long long qpow(long long x,long long y)
  10. {
  11. long long res=1;
  12. while(y)
  13. {
  14. if(y&1)res=res*x%mod;
  15. x=x*x%mod;
  16. y>>=1;
  17. }
  18. return res;
  19. }
  20. void pre_work()
  21. {
  22. C[0][0]=1;
  23. for(int i=1;i<=n;i++)
  24. {
  25. C[i][0]=1;
  26. for(int j=1;j<=i;j++)
  27. C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
  28. }
  29. jc[0]=1;
  30. for(long long i=1;i<=n*n;i++)
  31. jc[i]=(jc[i-1]*i)%mod;
  32. inv[n*n]=qpow(jc[n*n],mod-2);
  33. for(long long i=n*n;i;i--)
  34. inv[i-1]=inv[i]*i%mod;
  35. }
  36. long long get_C(long long x,long long y){return ((jc[x]*inv[y])%mod*inv[x-y])%mod;}
  37. long long lucas(long long x,long long y)
  38. {
  39. if(!y)return 1;
  40. return (get_C(x%mod,y%mod)*lucas(x/mod,y/mod))%mod;
  41. }
  42. int main()
  43. {
  44. scanf("%d%lld%d",&n,&m,&c);
  45. pre_work();
  46. if(n==m)
  47. {
  48. printf("%lld",lucas(n*n,c));
  49. return 0;
  50. }
  51. if(n*n<c*2)c=n*n-c;
  52. for(int i=1;i<=n;i++)
  53. {
  54. long long flag=m/n;
  55. if(i<=m%n)flag++;
  56. flag%=(mod-1);
  57. for(int j=0;j<=c;j++)
  58. dp[i][j]=qpow(C[n][j],flag);
  59. }
  60. wzc[0][0]=1;
  61. for(int i=1;i<=n;i++)
  62. for(int j=0;j<=c;j++)
  63. for(int k=0;k<=j;k++)
  64. wzc[i][j]=(wzc[i][j]+wzc[i-1][k]*dp[i][j-k]%mod)%mod;
  65. printf("%lld",wzc[n][c]);
  66. return 0;
  67. }

rp++

[CSP-S模拟测试]:chess(数学)的更多相关文章

  1. [CSP-S模拟测试]:chess(搜索+最短路)

    题目描述 $pig$在下象棋的时候特别喜欢用马,他总是计算着自己的马还需要几步才能吃掉对方的帅,以及方案数的个数,当然$pig$很笨,所以他只能求助于你.我们假设在$n\times m$的棋盘上,$p ...

  2. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  3. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  4. 0823NOIP模拟测试赛后总结

    考了两场感觉虚了... NOIP模拟测试30 分着考的. 就只有T2的美妙的暴力拿分了,60分rank10,挂了. T1是一道sb题,爆零了十分遗憾. 许多人都掉进了输出格式的坑里,C没大写.少个空格 ...

  5. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  6. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  7. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

  8. 【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1& ...

  9. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

随机推荐

  1. C语言Ⅰ博客作业01

    1.你对计算机科学与技术专业了解是怎样? 本专业培养具有良好的科学素养,系统地.较好地掌握计算机科学与技术包括计算机硬件.软件与应用的基本理论.基本知识和基本技能与方法,能在科研部门.教育单位.企业. ...

  2. [Git] 018 冲突在所难免,需要巧妙化解

    0. 回顾 [Git] 005 初识 Git 与 GitHub 之分支 中"4.2 情形二"的 9 提及了"解决冲突" 当时没有展开,这回详谈 我这回反其道而行 ...

  3. T-聊天止于呵呵

    (现代版)俗话说:流言止于智者,聊天止于呵呵.输入一段聊天记录,你的任务是数一数有 多少段对话“止于呵呵”,即对话的最后一句话包含单词 hehe 或者它的变形. 具体来说,我们首先提取出对话的最后一句 ...

  4. springboot2.0-统一处理返回结果和异常情况

    一.统一处理返回结果和异常处理的原因: 1.在springboot项目里我们希望接口返回的数据包含至少三个属性: a.code:请求接口的返回码,成功或者异常等返回编码,例如定义请求成功,code = ...

  5. jekins部署

    以下以在MAC上安装为例: 1.从官网下载安装包 https://jenkins.io/download 2.双击pkg包安装程序开始安装.(这种方式安装的不好卸载) 提示输入密码,按照提示的路径找到 ...

  6. Sql 字符串自增列的实现

    ALTER FUNCTION [dbo].[f_NextID](@tabname VARCHAR()) RETURNS ) AS BEGIN DECLARE @charval CHAR() IF LO ...

  7. Elastic Search闪退问题

    昨天还可以正常启动,今天及不行.. 在网上找了很多方法都不行,后来参考https://blog.csdn.net/happyzxs/article/details/89156068,修复好了 一.遇到 ...

  8. SPA(单页面应用)和MPA(多页面应用)

    话不多说,直接看图,一目了然

  9. Bootstrap前端框架快速入门专题

    1.Bootstrap简介 Bootstrap,出自自 Twitter,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的前端框架,它简洁灵活,使得 W ...

  10. Python爬虫之urllib.parse详解

    Python爬虫之urllib.parse 转载地址 Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数. 解析url 解析url( urlparse() ) ur ...