其实也不算很难想,每个元素质因子分解后的p^c的p和c用pair的形式存在每个元素vector里

要去前面找一个数使得所有指数相加是k的倍数,那么把vector里的所有c 模 k,然后去找前面互补的数的个数,可以用map存下前面元素模完k之后的vector,然后答案加一加就行

注意:如果a本身就是一个k次数,即其所有质因子的指数都是k的倍数,那么这种情况要单独处理一下

套了三个stl,一开始不敢写。。。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100005
ll n,k,a[N],x,cnt[N]; int vis[N],prime[N],m;
void init(){
for(int i=;i<=;i++){
if(!vis[i]){
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]*i>)break;
vis[prime[j]*i]=;
if(i%prime[j]==)break;
}
}
} ll p[N],c[N],mm;
void divide(ll x){
mm=;
for(int i=;i<=m;i++){
if(prime[i]>x)break;
if(x%prime[i]!=)continue;
p[++mm]=prime[i];c[mm]=;
while(x%prime[i]==)
x/=prime[i],c[mm]++;
}
if(x>)
c[++m]=,p[mm]=x;
} map<vector<pair<int,int> >,int>mp;
vector<pair<int,int> >v[N]; int main(){
init(); cin>>n>>k;
ll ans=,tot=; for(int i=;i<=n;i++){
cin>>a[i];
divide(a[i]);
for(int j=;j<=mm;j++){
c[j]%=k;
if(c[j]!=)
v[i].push_back(make_pair(p[j],c[j]));
} if(v[i].size()==){
ans+=tot;
tot++;
continue;
} vector<pair<int,int> >tmp;
for(int j=;j<v[i].size();j++){
pair<int,int> p;
p.first=v[i][j].first;
p.second=k-v[i][j].second;
tmp.push_back(p);
}
ans+=mp[tmp]; mp[v[i]]++;
} cout<<ans<<'\n';
}

stl+数论——1247D的更多相关文章

  1. 51nod 1010 stl/数论/二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 1010 只包含因子2 3 5 基准时间限制:1 秒 空间限制:1 ...

  2. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

  3. 【10.11校内测试】【优先队列(反悔贪心)】【莫队】【stl的应用??离线处理+二分】

    上次做过类似的题,原来这道还要简单些?? 上次那道题是每天可以同时买进卖出,所以用两个优先队列,一个存买进,一个存卖出(供反悔的队列). 这道题实际上用一个就够了???但是不好理解!! 所以我还是用了 ...

  4. QBXT Day 4 数学,数论

    今天讲一讲数论吧(虽然清明讲过了) 进制转换 我们来看10这个数怎么转换成k进制 因为10=2^3+2^1,所以10就是1010 三进制也同理10=3^2+3^0,所以就是101 我们对于一个10进制 ...

  5. BZOJ5302 [HAOI2018]奇怪的背包 【数论 + dp】

    题目 小 CC 非常擅长背包问题,他有一个奇怪的背包,这个背包有一个参数 PP ,当他 向这个背包内放入若干个物品后,背包的重量是物品总体积对 PP 取模后的结果. 现在小 CC 有 nn 种体积不同 ...

  6. Codeforces 979D (STL set)(不用Trie简单AC)

    题面: 传送门 题目大意: 给定一个空集合,有两种操作: 一种是往集合中插入一个元素x,一种是给三个数x,k,s,问集合中是否存在v,使得gcd(x,v)%k==0,且x+v<=s若存在多个满足 ...

  7. Algorithm: 多项式乘法 Polynomial Multiplication: 快速傅里叶变换 FFT / 快速数论变换 NTT

    Intro: 本篇博客将会从朴素乘法讲起,经过分治乘法,到达FFT和NTT 旨在能够让读者(也让自己)充分理解其思想 模板题入口:洛谷 P3803 [模板]多项式乘法(FFT) 朴素乘法 约定:两个多 ...

  8. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  9. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

随机推荐

  1. 【leetcode】929. Unique Email Addresses

    题目如下: Every email consists of a local name and a domain name, separated by the @ sign. For example, ...

  2. 阿里云Linux服务器购买、配置

    购买.配置阿里云Linux服务器配置ftp发布网站全教程 http://blog.csdn.net/Jolesen/article/details/77505840

  3. centos下安装java jdk1.8

    ---恢复内容开始--- mysql密码修改了,发现还没装jdk,那就一起记录下来吧.虽然网上好多,但自己想查更方便了. 查看有没有装jdk #java -version显示下面信息,不是oracle ...

  4. Service系统服务(六):rsync基本用法、rsync+SSH同步、配置rsync服务端、访问rsync共享资源、使用inotifywait工具、配置Web镜像同步、配置并验证Split分离解析

    一.rsync基本用法 目标: 本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务: 1> 将目录 /boot 同步到目录 /todir 下   2> 将目录 /boot 下的 ...

  5. lazy图片懒加载使用

    看到一个小伙子写的言简意赅很不错,摘录如下: https://www.npmjs.com/package/vue-lazyload 首先我们先在npm上下载vue-lazyload的包 1 npm i ...

  6. js一些if语句判断条件为fasle的情况

    js一些if语句判断条件为fasle的情况 之前有写一个if判断条件产生的bug,当时写逻辑处理数据是在后台给接口之前,所以自己拟定了字段值为number类型的0或者1来进行判断,最后接口出来的时候是 ...

  7. kafka ProducerConfig 配置

    kafka-clients : 1.0.1

  8. 1、jQuery操作Dom

    1.添加元素 <code> <script language="JavaScript">$().ready(function(){$("input ...

  9. 几个可以通过curl查询公网IP的站点

    通过命令行获取公网ip 非常实用分享给大家实例: [root@T900 ~]# curl cip.cc IP : 119.29.29.29 地址 : 中国 广东省 广州市 运营商 : 腾讯网络 数据二 ...

  10. 多条件异步搜索+分页(PHP、 AJAX、ThinkPHP)

    项目中遇到的多条件异步查询及数据分页问题,做了数次尝试,最终虽目的达到,略有繁琐,希望能有更好的处理方式 基于 tp框架 1.html页面代码 <div class="h_cityNa ...