Cookie Counter

Problem's Link:  http://acm.hnu.cn/online/?action=problem&type=show&id=13412&courseid=0


Mean:

将N分为D份,每份不超过X,有多少种分法?

analyse:

首先我们想到的是迭代,但是数据太大,一路迭代下去必定爆栈+超内存+TLE。

我们枚举X,对于满足条件的X,求和统计答案,不满足条件的X,更新往下迭代的P值。最后对P求和即为答案。

这题DP也可以做,不过上面的方法从时间和空间上都大大优于DP。

Time complexity: O(N)

Source code: 

/*
* this code is made by crazyacking
* Verdict: Accepted
* Submission Date: 2015-08-16-16.39
* Time: 0MS
* Memory: 137KB
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#define  LL long long
#define  ULL unsigned long long
using namespace std;
const LL mod = 1000000007;
LL inv[5000];
LL N,X,D;
void pre()
{
     inv[1] = 1;
     for(int i=2; i<5000; i++)
           inv[i] = (mod - mod / i) * inv[mod % i] % mod;
}
int main()
{
     pre();
     while(scanf("%d %lld %d",&N,&D,&X) && N)
     {
           LL ans = 0;
           for(int i=0; i*X<=N; i++)
           {
                 LL p = 1;
                 if(i <= D)
                 {
                       for(int j=1; j<=i; j++)
                       {
                             p = (D - j + 1) % mod * p % mod;
                             p = p * inv[j] % mod;
                       }
                 }
                 else p = 0;
                 for(int j=0; j<i; j++) p = (mod - p);
                 int gap = N - i*X;
                 for(int j=1; j<=gap; j++)
                 {
                       p = (D + gap - j + mod) % mod * p % mod;
                       p = p * inv[j] % mod;
                 }
                 ans = ans + p;
                 if(ans >= mod)
                       ans -= mod;
           }
           printf("%lld\n",ans);
     }
     return 0;
}

求逆元 - HNU 13412 Cookie Counter相关推荐

  1. BZOJ 3456: 城市规划 [多项式求逆元 DP]

    题意: 求出n个点的简单(无重边无自环)无向连通图数目. 方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方 ...

  2. 线性求逆元模板_ACM 数论基本模板

    ACM 数论基本模板 1.欧几里得 求最大公约数,最小公倍数 (1)递归的写法:int gcd(int a,int b) {return b?gcd(b,a%b):a;} (2)辗转相除法: int ...

  3. 求逆元(线性求逆元)及其扩展欧几里得

    线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...

  4. 拓展欧几里得模板/求逆元模板(java)

    拓展欧几里得模板 参考:哈尔滨理工大学ACM培训资料汇编/ACM-ICPC培训资料汇编* 基本原理 :设 a 和 b 不全为 0,则存在整数 x,y 使得 xa yb=gcd(a,b)=c 对于辗转相 ...

  5. nyoj-Color the necklace(Ploya定理 + 欧拉函数 + 扩展欧几里得(求逆元))

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=688 此题题解 不太懂,因为对这些概念,定理太模糊,理解起来比较困难,不过想想还是应该把代 ...

  6. 【BZOJ-4522】密钥破解 数论 + 模拟 ( Pollard_Rho分解 + Exgcd求逆元 + 快速幂 + 快速乘)...

    4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 290  Solved: 148 [Submit][Stat ...

  7. 51nod 1118 机器人走方格 解题思路:动态规划 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题

    51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...

  8. “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)

    题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...

  9. 礼物(中国剩余定理+拓展gcd求逆元+分治=拓展Lucus)

    礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k ...

最新文章

  1. 共轭梯度下降法matlab,用matlab实现最速下降法,牛顿法和共轭梯度法求解实例
  2. TS和JS相对比的优势
  3. Java学习笔记-网络编程
  4. 《2012》:让灾难成为一场洗礼
  5. WTM系列视频教程:CodeFirst
  6. java 调用 rsync_运行rsync时,QProcess不显示任何输出
  7. oledb连接服务器的文件,请教OLEDB链接和ODBC链接连接的不同和对系统的要求...
  8. 重磅进展,Intel已能够生产量子芯片硅晶圆
  9. tensorflow中的py_function与watch
  10. 【系统集成项目管理工程师】—计算真题公式汇总及分析
  11. 使用T-SQL语句创建数据库
  12. ASP.NET 获取IP信息等探针
  13. the JDBC Driver has been forcibly unregistered
  14. 使用000webhost.com免费主机搭建一个WordPress站点
  15. 我用php构建了魔兽世界服务器,只为证明php是世界上最好的语言
  16. 自动化测试应用---HTML测试报告+邮件发送
  17. QueryPerformanceCounter实现Windows微秒级延时
  18. 计算机编程课程顺序_您可以在八月开始的500项免费在线编程和计算机科学课程
  19. swustOJ 1378 Best Grass
  20. leetcode 883. 三维形体投影面积(python)

热门文章

  1. ORB-SLAM论文翻译
  2. 使用 .NET 实现 Ajax 长连接
  3. 如何在ASP.Net 中把图片存入数据库
  4. 一种二维条码图像处理流程
  5. python窗口显示图片imread() imshow()_Python-OpenCV学习之imread,imshow
  6. Java学习总结:55(偶对象保存:Map接口)
  7. 有关Run-Time Check Failure #2 - Stack around the variable 'XXX' was corrupted.错误的解决方法
  8. c++ using 前置声明_C++ 类的前置声明
  9. android如何查看方法属于哪个类,Android Studio查看类中所有方法和属性
  10. python函数手册68_直接在python中检索68个内置函数?