博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求逆元 - HNU 13412 Cookie Counter
阅读量:6481 次
发布时间:2019-06-23

本文共 1335 字,大约阅读时间需要 4 分钟。

Cookie Counter 

Problem's Link:


 

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;
}

 

转载地址:http://mbfuo.baihongyu.com/

你可能感兴趣的文章
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>
MongoDB的基础使用
查看>>
进程间通信——命名管道
查看>>
ssh登陆不需要密码
查看>>
java mkdir()和mkdirs()区别
查看>>
OSChina 周六乱弹 ——揭秘后羿怎么死的
查看>>
IT人员的职业生涯规划
查看>>