XJOI 夏令营501-511测试11 统计方案
小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c。但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都找出来。你能帮他计算一下一共有多少种取数方案吗?请把最后的方案数模1000000007后输出。
小B记得他至少取了一个数。
输入格式:
第一行三个正整数n,p,c,含义如题目所述。
接下来一行有n个正整数,表示生成的n个随机数。
输出格式:
一个数,方案数模1000000007。
样例输入:
2 7 2
1 2 4
样例输出:
2
数据范围:
对于30%的数据,n≤16
另有30%的数据,p≤10000
对于100%的数据,n≤32, p≤10^9, c≤10^9, a[i]<p, p是质数
时间限制:
1 sec
空间限制:
128MB
折半搜索+逆元
因为n只有32的范围
所以考虑折半搜索,将前$\frac{n}{2}$和后$\frac{n}{2}$个元素的所有乘积处理出来
然后将这两组之间的元素进行匹配
对于一组中的乘积$a$,那么需要在另一组中找到$b$,满足$a*b \equiv c$
那么可以发现$b$为$a$的逆元$k$再乘上$c$,因为$p$是质数,那么$k$可以用费马小定理解决
即$b=a^{p-2}*c$,在$b$的数组中二分查找即可
还有这道题有个坑点
1.如果$c\geq p$答案即为0
#include <bits/stdc++.h>
#define mod 1000000007
#define ll long long
using namespace std;
ll n,p,c,a[1000],tot,ans;
vector <ll> s;
vector <pair<ll,ll> > t;
ll m_pow(ll a,ll b)//快速幂,求逆元
{
ll ans=1;
while (b)
{
if (b&1)
ans=(ans*a)%p;
b>>=1;
a=(a*a)%p;
}
return ans;
}
void dfs1(ll x,ll l,ll r,ll sum)//用dfs求出每一个乘积
{
if (x==r+1)
{
ll ne;
ne=(m_pow(sum,p-2)*c)%p;//将每一乘积需要的答案压入数组
s.push_back(ne);
return;
}
dfs1(x+1,l,r,sum);
dfs1(x+1,l,r,(sum*a[x])%p);
}
void dfs2(ll x,ll l,ll r,ll sum)
{
if (x==r+1)
{
vector <pair<ll,ll> > :: iterator it;
it=lower_bound(t.begin(),t.end(),make_pair(sum,(ll)0));//进行匹配
if ((*it).first==sum)
ans=(ans+(*it).second)%mod;
return;
}
dfs2(x+1,l,r,sum);
dfs2(x+1,l,r,(sum*a[x])%p);
}
int main()
{
scanf("%lld%lld%lld",&n,&p,&c);
for (ll i=1;i<=n;i++)
scanf("%lld",&a[i]);
if (c>=p)
{
printf("0\n");
return 0;
}
for (ll i=1;i<=n;i++)
a[i]%=p;
dfs1(1,1,n/2,1);
sort(s.begin(),s.end());
ll kind=s[0],w=1;
for (ll i=1;i<(ll)s.size();i++)
{
if (s[i]==kind)
w++;
else
{
t.push_back(make_pair(kind,w));
w=1;
kind=s[i];
}
}
t.push_back(make_pair(kind,w));
tot=0;
dfs2(n/2+1,n/2+1,n,1);
if (c==1)
ans=(ans-1)%mod;
printf("%lld\n",ans%mod);
}
XJOI 夏令营501-511测试11 统计方案的更多相关文章
- XJOI夏令营501训练1——分配工作
传送门:QAQQAQ 题意:某公司有工作人员x1,x2,…,xn ,他们去做工作y1,y2,…,ym(n<=m) ,每个人都能做其中的几项工作,并且对每一项工作都有一个固定的效率.问能否找到一种 ...
- test20190725 夏令营测试11
50+80+90=220.(每题满分90) 砍树 小A在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一条长度为a[i]的竖线段.由于有的树过于高大,挡住了其他的树,使得另一 ...
- [XJOI]noip40 T2统计方案
统计方案 小B写了一个程序,随机生成了n个正整数,分别是a[1]..a[n],他取出了其中一些数,并把它们乘起来之后模p,得到了余数c.但是没过多久,小B就忘记他选了哪些数,他想把所有可能的取数方案都 ...
- 【NOIP模拟赛】chess 建图+spfa统计方案数
似乎弗洛伊德和迪杰斯特拉都干不了统计方案数,spfa的话就是不断入队就好. #include <cstdio> #include <cstring> #include < ...
- Android Activity启动耗时统计方案
作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...
- Java实现统计方案
统计方案 题目描述 在一无限大的二维平面中,我们做如下假设: 1.每次只能移动一格: 2.不能向后走(假设你的目的地是"向上",那么你可以向左走,可以向右走,也可以向上走,但是不可 ...
- XJOI 夏令营501-511测试11 游戏
Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/(2^p)的概率完成并得到2^(p-1)分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流 ...
- 论APP测试中黑盒测试方案的重要性?
运筹帷幄之中,决胜千里之外.古人足不出户,通过正确的部署就能决定千里之外战争的胜利!而于测试人员而言,制定正确的测试方案,就是日后测试就是是否顺利的决定性因素. 在整个测试过程中,对测试人员.资源以及 ...
- C#技术分享【PDF转换成图片——11种方案】
1.[iTextSharp.dll],C# 开源PDF处理工具,可以任意操作PDF,并可以提取PDF中的文字和图片,但不能直接将PDF转换成图片. DLL和源码 下载地址:http://downloa ...
随机推荐
- 我竟在arm汇编除法算法里找到了leetcode某道题的解法
今天讲讲arm汇编中除法的底层实现.汇编代码本身比较长了,如需参考请直接拉到文末. 下面我直接把arm的除法算法的汇编代码转译成C语言的代码贴出来,并进行解析. 因为篇幅有限,所以在此只解析无符号整型 ...
- 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
一.实验目的 熟悉 Postman 的使用;熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 流表有软超时和硬超时的概念,分别对应流表中的 idle_timeou ...
- java转python代码
今天发现一个好玩的工具:可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: http://www.antlr3.org/download/antlr-3 ...
- Centos最小化安装后,不能使用yum命令的解决办法
刚刚最小化方式安装了CentOS 7 后,想查看一下config,却发现没有config文件,就想用yum下载一个,但是发现yum不能正常工作!!! 一,输入安装X Window命令,安装出错!! 在 ...
- python框架day01
一.注意事项 # 如何让你的计算机能够正常的启动django项目 1.计算机的名称不能有中文 2.一个pycharm窗口只开一个项目 3.项目里面所有的文件也尽量不要出现中文 4.python解释器尽 ...
- 微信小程序适配iPhone X
1.获取设备型号 App({ // 全局数据 globalData: { // 其他数据定义 ... isIPX: false, // 当前设备是否为 iPhone X }, // 小程序启动入口 o ...
- 一个故事看懂AI神经网络工作原理
我是一个AI神经元 我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇. 之所以叫这个名字,是因为我的工作有点像人类身体中的神经元. 人体中的神经元可以传递生物信号,给它输入一个信号,它经 ...
- GIS和视频监控的集成
本文讨论了使用增强现实(AR)技术的三维(3D)地理信息系统(GIS)和视频监视系统的集成.进行这种集成的动机是要克服常规视频监视系统面临的问题.关于哪个摄像机当前监视此类系统中哪个区域的明确信息:因 ...
- springCloud微服务调用失败【CannotGetJdbcConnectionException: Failed to obtain JDBC Connection】
详情如下: 2019-07-28 10:56:18.229 ERROR 16212 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet ...
- spring-boot-route(十六)使用logback生产日志文件
日志是一个系统非常重要的一部分,我们经常需要通过查看日志来定位问题,今天我们一起来学习一下Spring Boot的日志系统.有很多同学习惯性的在生产代码中使用System.out来输出日志,这是不推荐 ...