博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF 567C(Geometric Progression-map)
阅读量:7036 次
发布时间:2019-06-28

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

C. Geometric Progression
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Polycarp loves geometric progressions very much. Since he was only three years old, he loves only the progressions of length three. He also has a favorite integer k and a sequence a, consisting of n integers.

He wants to know how many subsequences of length three can be selected from a, so that they form a geometric progression with common ratio k.

A subsequence of length three is a combination of three such indexes i1, i2, i3, that 1 ≤ i1 < i2 < i3 ≤ n. That is, a subsequence of length three are such groups of three elements that are not necessarily consecutive in the sequence, but their indexes are strictly increasing.

A geometric progression with common ratio k is a sequence of numbers of the form b·k0, b·k1, ..., b·kr - 1.

Polycarp is only three years old, so he can not calculate this number himself. Help him to do it.

Input

The first line of the input contains two integers, n and k (1 ≤ n, k ≤ 2·105), showing how many numbers Polycarp's sequence has and his favorite number.

The second line contains n integers a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — elements of the sequence.

Output

Output a single number — the number of ways to choose a subsequence of length three, such that it forms a geometric progression with a common ratio k.

Sample test(s)
input
5 21 1 2 2 4
output
4
input
3 11 1 1
output
1
input
10 31 2 6 2 3 6 9 18 3 9
output
6
Note

In the first sample test the answer is four, as any of the two 1s can be chosen as the first element, the second element can be any of the 2s, and the third element of the subsequence must be equal to 4.

用map分别找a/k,a*k

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define Rep(i,n) for(int i=0;i
=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (x<<1)#define Rson ((x<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,127,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define INF (2139062143)#define F (100000007)#define MAXN (1000000)typedef long long ll;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}int n,k;int a[MAXN];bool b[MAXN]={0};int l[MAXN]={0};int cnt[40],cnt2[40];ll f[MAXN]={0},f2[MAXN]={0};map
S; map
::iterator it; int main(){// freopen("C.in","r",stdin);// freopen(".out","w",stdout); scanf("%d%d",&n,&k); For(i,n) { scanf("%d",&a[i]); // while (a[i]%k==0) l[i]++,a[i]/=k; } For(i,n) { if (a[i]%k==0&&S.find(a[i]/k)!=S.end()) f[i]=S[a[i]/k]; it=S.find(a[i]); if (it==S.end()) S[a[i]]=1; else S[a[i]]++; } S.clear(); ForD(i,n) { if (S.find((ll)(a[i])*k)!=S.end()) f2[i]=S[((ll)(a[i])*k)]; it=S.find(a[i]); if (it==S.end()) S[a[i]]=1; else S[a[i]]++; } ll ans=0; For(i,n) ans+=f[i]*f2[i]; cout<
<

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

你可能感兴趣的文章
spark rdd saveAsTextFile保存为文件
查看>>
修改 sql 提示符信息:
查看>>
SQL Server Service Broker创建单个数据库会话(消息队列)
查看>>
flask-session组件
查看>>
从线程池到synchronized关键字详解
查看>>
SpringBoot单元测试中的事务和Session
查看>>
机器学习领域的一些顶级会议
查看>>
红烧瘦肉
查看>>
java中继承关系学习小结
查看>>
BZOJ 1823: [JSOI2010]满汉全席(2-SAT)
查看>>
Nginx软件优化
查看>>
mysql-\g和\G的作用
查看>>
actionbar tab 字体大小设置
查看>>
002-序列化装换JSON&XML概述
查看>>
2018春招头条第一批
查看>>
响应式编程总览
查看>>
解决使用elementUI框架el-upload上传组件时session丢失问题
查看>>
Spring之WEB模块
查看>>
分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...
查看>>
什么是epoll
查看>>