【NOI广东省选模拟赛】割
【问题描述】
给出 n 个数 a1,a2,...,an, 询问有多少个三元组(i, j, k)满足以下两个条件:
1、 i < j < k; 2、 ai*aj*ak 是 p 的倍数。
【输入格式】
第一行两个数 n, p。
接下来一行 n 个数。
【输出格式】
一行一个数表示答案。
【输入样例 1】
4 100
4 5 2 25
【输出样例 1】
2
【输入样例 2】
12 1
1 1 1 1 1 1 1 1 1 1 1 1
【输出样例 2】
220
【输入样例 3】
27 36
269 154 94 221 171 154 50 210 258 358 121 159 8 47 290 125 291 293 338 248 295 160 268
227 99 4 27
【输出样例 3】
145
【数据范围与约定】
对于 30%的数据: n <= 100。
对于 60%的数据: n <= 2000, 1 <= ai <= 10^8。
对于 100%的数据: n <= 30000, 1 <= ai <= 10^8, 1 <= p <= 10^6。
第一眼 好,数论题
第二眼 哦,数据结构来维护
第三眼 额,可以质因数分解?
...
第N眼 靠,怎么做啊?
经过不断的磕磕碰碰,终于往动态规划上想了想,(好,就决定是你了)
前面都是废话
下面是正经部分:
- f[i][j],表示此时我取了1~3元集,与p的最大公约数为j时的方案数。
- 最外层循环i,枚举所有的a[i]
- 倒序从3到1枚举j(想要在自己的身上跳舞就要从身子下方更新上来,不能用脚更新了腰,又把更新后的腰来更新头SMG..)总之如果正序来,会使得已经更新后的值作为前一个a[i-1]的DP值又更新了一次此时的a[i]的DP值。
- 然后用a[i]与p的GCD与枚举的GCD相乘后的结果再与P求一次GCD, 所以此时被更新的状态就是最后求出来的GCD了。
- 当然如果当i==1时,就不需要枚举之前的因子了 直接 f[1][GCD(a[i],p)]++ 就可以了。
几个注意事项:
- 预处理出所有a[i]与p的GCD(不然中间循环算太多次GCD会超时的)
- 看起来DP数组的第二位要开到 p(1000000), 其实不用,我们给p的所有因子编号,开到2*sqrt(p)即可。
- #include<iostream>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- #define For(i,a,b) for(register llg i=a;i<=b;++i)
- #define Dwn(i,a,b) for(register llg i=a;i>=b;--i)
- #define llg long long
- using namespace std;
- const llg N=3e4+;
- llg f[][];
- llg yz[N],tot=;
- llg a[N],p,n;
- llg px[];
- llg fp[N];
- inline void read(llg &v){
- v=;
- char c=getchar();
- while(c<''||c>'')c=getchar();
- while(c>=''&&c<='')v=v*+c-'',c=getchar();
- }
- void Dv(llg x){
- llg qx=sqrt(x);
- For(i,,qx){
- if(x%i==){
- llg y1=i;
- llg y2=x/i;
- if(y1!=y2){
- yz[++tot]=y1; px[y1]=tot;
- yz[++tot]=y2; px[y2]=tot;
- }else{
- yz[++tot]=y1; px[y1]=tot;
- }
- }
- }
- }
- llg Gcd (llg x,llg y){
- while(){
- llg yy=x%y;
- x=y; y=yy;
- if(yy==)return x;
- }
- }
- int main(){
- freopen("divide.in","r",stdin);
- freopen("divide.out","w",stdout);
- read(n); read(p);
- For(i,,n) read(a[i]);
- Dv(p);
- For(i,,n) fp[i]=Gcd(a[i],p);
- For(i,,n){
- Dwn(j,,){
- llg Gx;
- if(j==){
- Gx=fp[i];
- f[][px[Gx]]+=;
- continue;
- }
- For(k,,tot){
- if(f[j-][k]==)continue;
- Gx=Gcd(yz[k]*fp[i],p);
- f[j][px[Gx]]+=f[j-][k];
- }
- }
- }
- cout<<f[][px[p]]<<endl;
- fclose(stdin); fclose(stdout);
- return ;
- }
【NOI广东省选模拟赛】割的更多相关文章
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
- NOI.AC NOIP模拟赛 第二场 补记
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- NOI.AC NOIP模拟赛 第四场 补记
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- @省选模拟赛03/16 - T3@ 超级树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...
- 3.28 省选模拟赛 染色 LCT+线段树
发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...
随机推荐
- Srvctl命令具体解释(10g)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lovedieya/article/details/28169481 Srvctl命令 Srvct ...
- java后台判断发布的图片是否存在
x现在已知一个固定格式的图片,判断图片是否存在例如,http://127.0.0.1/image/201709091300.jpg import java.net.URL;import java.ne ...
- jmeter测试总结
一次性能测试的总结 相关推荐:Apusic应用服务器的性能调节_JVM优化 Apusic应用服务器作为企业应用的运行平台,系统的性能非常重要.当应用对性能的要求比较苛刻时,就要考虑是否需要改变系统的缺 ...
- vue2.x源码理解
也不知道哪股风潮,钻研源码竟成了深入理解的标配.我只想说一句,说的很对 准备工作 从GitHub上面下载vue的源码(https://github.com/vuejs/vue) 了解下Flow,Flo ...
- RabbitMQ的介绍与spring整合
本文主要讲述的是个人参考官网及其他前辈博客,对RabbitMQ的一些理解与spring整个RabbitMQ. 一.RabbitMQ的介绍 1.1.什么是RabbitMQ RabbitMQ是一个由erl ...
- python实现路由追踪,并生成追踪图片
#!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys,time,subprocess import warnings,logging ...
- spring mvc提交日期类型参数
如题,spring mvc直接提交Date类型参数会报错,400 bad request的错误.在controller里加上 @InitBinder protected void initBinder ...
- tflearn 数据集太大无法加载进内存问题?——使用image_preloader 或者是 hdf5 dataset to deal with that issue
tflearn 数据集太大无法加载进内存问题? Hi, all! I'm trying to train deep net on a big dataset that doesn't fit into ...
- RightScale发布2017年度云调查报告
RightScale最近发布了他们的年度云报告(RightScale 2017云现状报告,RightScale 2017 State of the Cloud Report),这份报告包括了云计算在采 ...
- HDU3440 House Man (差分约束)
In Fuzhou, there is a crazy super man. He can’t fly, but he could jump from housetop to housetop. To ...