清北学堂 day6 花
1.花
( flower.cpp/c/pas)
【 问题描述】
商店里出售 n 种不同品种的花。为了装饰桌面,你打算买 m 支花回家。你觉得放两支一
样的花很难看,因此每种品种的花最多买 1 支。求总共有几种不同的买花的方案? 答案可能
很大,输出答案 mod p 的值。
【 输入格式】
一行 3 个整数 n, m, p, 意义如题所述。
【 输出格式】
一个整数,表示买花的方案数。
【输入输出样例 1】
| flower.in | flower.out |
| 4 2 5 | 1 |
见选手目录下的 flower / flower1.in 与 flower / flower1.out
【输入输出样例 1 说明】
用数字 1,2,3,4 来表示花的种类的话,4 种花里买各不相同的 2 支的方案有(1,2)、(1,3)、
(1,4)、 (2,3)、 (2,4)、 (3,4), 共 6 种方案, 模 5 后余数是 1。
【输入输出样例 2】
见选手目录下的 flower / flower2.in 与 flower / flower2.out
【 数据范围】
对于 30%的数据, n,m≤10
对于 50%的数据, n,m≤1000
对于 80%的数据, 1≤m≤n≤50,000
对于 100%的数据, 1≤m≤n≤1,000,000, p≤1,000,000,000
解:100分:运用组合数公式:C(n,m)=n!/(m!*(n-m)!)
因为范围较大,所以进行质因数分解以约分,先打出质数表,最后直接寻找剩余质数并进行乘法取模即可;(必要时可使用快速幂与快速加)。
开 long #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define man 1000010
#define sc(x) scanf("%lld",&x)
#define mem(x) memset(x,0,sizeof(x))
#define ll long long
using namespace std;
ll used[man],prime[man],tot=,aa=;
bool isp[man];
int n,m,p;
inline void mkp(int x)
{
for(int i=;i<=x;i++)
{
if(!isp[i])
{ prime[++tot]=i;
}
for(int j=;j<=tot&&i*prime[j]<=x;j++)
{
isp[i*prime[j]]=;
if(i%prime[j]==)
break;
}
}
}
void calc1(int x)//n
{
int ans=x;
for(int i=;i<=tot;i++)
{
if(ans%prime[i]==)
{
int t=;
while(ans%prime[i]==)
{
ans=ans/prime[i];
t++;
}
used[prime[i]]+=t;
}
if(!isp[ans])
{ used[ans]++;
ans=;
}
if(ans==)
break;
}
}
void calc2(int x)//m&(n-m)
{
int ans=x;
for(int i=;i<=tot;i++)
{
if(ans%prime[i]==)
{
int t=;
while(ans%prime[i]==)
{
ans=ans/prime[i];
t++;
}
used[prime[i]]-=t;
}
if(!isp[ans])
{ used[ans]--;
break;
}
if(ans==)
break;
}
}
ll badd(ll a,ll b,ll c)//快速加
{
ll ans=,bas=a;
while(b)
{
if(b&) ans=(ans+bas)%p;
bas=(bas+bas)%p;
b>>=;
}
return ans;
}
ll bpow(ll a,ll b,ll c)//快速幂
{
int ans=,bas=a;
while(b)
{
if(b&) ans=(ans*(bas%p))%p;
bas=((bas%p)*(bas%p))%p;
b>>=;
}
return ans;
}
int main()
{ freopen("flower.in","r",stdin);
freopen("flower.out","w",stdout);
mem(prime);mem(used);mem(isp);
sc(n);sc(m);sc(p);
mkp(n);
for(int i=;i<=n;i++)//对n!质因数分解
calc1(i);
for(int i=;i<=m;i++)//对m!质因数分解
calc2(i);
for(int i=;i<=n-m;i++)//对(n-m)!质因数分解
calc2(i);
for(int i=;i<=tot;i++)
{
if(used[prime[i]]>)
{
aa=badd(aa,bpow(prime[i],used[prime[i]],p),p);
}
}
printf("%lld\n",aa);
return ;
}
清北学堂 day6 花的更多相关文章
- 清北学堂 day6 兔子
---恢复内容开始--- [问题描述] 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与 ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 7月清北学堂培训 Day 3
今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...
- 清北学堂模拟day6 花
[问题描述] 商店里出售n种不同品种的花.为了装饰桌面,你打算买m支花回家.你觉得放两支一样的花很难看,因此每种品种的花最多买1支.求总共有几种不同的买花的方案?答案可能很大,输出答案mod p的值. ...
- 清北学堂模拟day6 兔子
[问题描述] 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子 ...
- 清北学堂模拟day6 圆桌游戏
[问题描述] 有一种圆桌游戏是这样进行的:n个人围着圆桌坐成一圈,按顺时针顺序依次标号为1号至n号.对1<i<n的i来说,i号的左边是i+1号,右边是i-1号.1号的右边是n号,n号的左边 ...
随机推荐
- k8s1.4.3安装实践记录(2)-k8s安装
前面一篇已经安装好了ETCD.docker与flannel(k8s1.4.3安装实践记录(1)),现在可以开始安装k8s了 1.K8S 目前centos yum上的kubernetes还是1.2.0, ...
- 转-SpringMVC——之 国际化
原文地址:http://www.cnblogs.com/liukemng/p/3750117.html 在系列(7)中我们讲了数据的格式化显示,Spring在做格式化展示的时候已经做了国际化处理,那么 ...
- [转]SQL Server 结构读取
本文来自:http://www.cnblogs.com/StrangeCity/p/4352753.html -- 本文来自:http://www.cnblogs.com/StrangeCity/p/ ...
- 线程的run( ) 和 start( ) 区别
Run() : run()就是个普通方法,可以调用执行,但是是同步调用,没有异步的效果. Run()方法就是个普通方法,可以调用多次 Start(): 通知线程规划期,此线程已经准备就绪,等待调用 ...
- git 怎么上传文件到github上
1.安装git sudo apt-get install git 2.配置全局变量 git config --global user.name langhunm git co ...
- [转] geochart 地图控件官方示例
<html> <head> <script type='text/javascript' src='https://www.google.com/jsapi'>&l ...
- Tkinter Listbox(列表框)
Python - Tkinter Listbox(列表框): 列表框部件用于显示一个项目列表,用户可以选择的项目数 列表框部件用于显示一个项目列表,用户可以选择的项目数. 语法: 这里是一个简单的 ...
- vs2010 安装 Ajax Control Toolkit
Ajax Control Toolkit 7.1005.0 The Ajax Control Toolkit contains a rich set of controls that you can ...
- 指向“**js/shop.js”的 <script> 加载失败
指向“”的 <script> 加载失败 找了半天没找到原因 原来是meta里面的 csp Content-Security-Policy <meta http-equiv=" ...
- Delphi IOS 后台定时器
3.这里有一个问题,就是客户端是通过心跳来和服务端保持连接,心跳是由定时器触发的,当我退到后台以后,定时器方法被挂起,那么通过如下设置来在后台运行定时器 beginBackgroundTaskWith ...