清北学堂 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号的左边 ...
随机推荐
- Micro-PaaS(Docker+K8S)
1.概述 Docker是一种Linux容器工具集,它是为构建(Build).交付(Ship)和运行(Run)分布式应用而设计的. Kubernates:是开源的容器集群管理系统.它构建在Docker技 ...
- Java-Runoob-面向对象:Java 接口
ylbtech-Java-Runoob-面向对象:Java 接口 1.返回顶部 1. Java 接口 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以 ...
- [转][Java]Jsp入门
<% response.getOutputStream().write("123".getBytes()); %> 新建一个 Web Project 项目,jsp 文件 ...
- HTTP请求与响应协议
HTTP(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则 HTTP就是一个通信规则,通信规则规定了客户端发送给服 ...
- 导入城市文件数据(csv)格式demo
页面: js: 后台:
- Linux更换jdk版本的一些问题
111111111111111111111111111111111111111111111111111111111111111111111111 在服务器上更新了新的 jdk,也在 /etc/prof ...
- 星型打分插件 bootstrap-rating-input
最近帮人实现一个打分的功能,发现bootstrap-rating-input是个简单又好用的星型打分,我对其做了些定制,添加了分值说明,并修改了样式,毕竟 bootstrap 自身的黑色五角星还是不够 ...
- HTTP接口开发专题二(发送http请求的接口工具类)
import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; imp ...
- BDE View not exists
Table does not exist. [Microsoft][ODBC SQL Server Driver][SQL Server]对象名 'vw1' 无效.
- mysql 挑选列导入
insert into boleht_development.`htprojects`(id,pname,`general`,imgsrc,whatwedo,howwedo,bp) select ci ...