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

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

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

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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define N 100005
  5. ll n,k,a[N],x,cnt[N];
  6.  
  7. int vis[N],prime[N],m;
  8. void init(){
  9. for(int i=;i<=;i++){
  10. if(!vis[i]){
  11. prime[++m]=i;
  12. }
  13. for(int j=;j<=m;j++){
  14. if(prime[j]*i>)break;
  15. vis[prime[j]*i]=;
  16. if(i%prime[j]==)break;
  17. }
  18. }
  19. }
  20.  
  21. ll p[N],c[N],mm;
  22. void divide(ll x){
  23. mm=;
  24. for(int i=;i<=m;i++){
  25. if(prime[i]>x)break;
  26. if(x%prime[i]!=)continue;
  27. p[++mm]=prime[i];c[mm]=;
  28. while(x%prime[i]==)
  29. x/=prime[i],c[mm]++;
  30. }
  31. if(x>)
  32. c[++m]=,p[mm]=x;
  33. }
  34.  
  35. map<vector<pair<int,int> >,int>mp;
  36. vector<pair<int,int> >v[N];
  37.  
  38. int main(){
  39. init();
  40.  
  41. cin>>n>>k;
  42. ll ans=,tot=;
  43.  
  44. for(int i=;i<=n;i++){
  45. cin>>a[i];
  46. divide(a[i]);
  47. for(int j=;j<=mm;j++){
  48. c[j]%=k;
  49. if(c[j]!=)
  50. v[i].push_back(make_pair(p[j],c[j]));
  51. }
  52.  
  53. if(v[i].size()==){
  54. ans+=tot;
  55. tot++;
  56. continue;
  57. }
  58.  
  59. vector<pair<int,int> >tmp;
  60. for(int j=;j<v[i].size();j++){
  61. pair<int,int> p;
  62. p.first=v[i][j].first;
  63. p.second=k-v[i][j].second;
  64. tmp.push_back(p);
  65. }
  66. ans+=mp[tmp];
  67.  
  68. mp[v[i]]++;
  69. }
  70.  
  71. cout<<ans<<'\n';
  72. }

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. 同时安装CUDA8.0和CUDA9.0

    http://geyao1995.com/CUDA8_CUDA9/ tensorflow1.5版本竟然不支持CUDA8.0了 卸载是不可能卸载的 1.原料准备 CUDA9.0下载:https://de ...

  2. PHP FILTER_SANITIZE_STRING 过滤器

    定义和用法 FILTER_SANITIZE_STRING 过滤器去除或编码不需要的字符. 该过滤器删除那些对应用程序有潜在危害的数据.它用于去除标签以及删除或编码不需要的字符. Name: " ...

  3. 浏览器 url 编码

    1.问题的由来 : http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 2.网络标准RFC 1738做了硬性规定: 只有字母和数字[0-9 ...

  4. winserver安装zabbixAgent

    zabbix 布署实践[8 监控windows server]   参考http://www.cnblogs.com/likehua/p/3968689.html的思路,我安装的是zabbix 3.0 ...

  5. Java奇葩笔试题

    1.下面代码中,在if处填写什么代码,可以使得输出结果为:AB 1 2 3 4 5 6 7 8 9 public static void main(String[] args) { if ( ){// ...

  6. Android:关于onConfigurationChanged()的介绍(转)

    转载:http://www.cnblogs.com/bluestorm/p/3622444.html 从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求 ...

  7. redis shell命令

    APPEND key value追加一个值到key上 AUTH password验证服务器 BGREWRITEAOF异步重写追加文件 BGSAVE异步保存数据集到磁盘上 BLPOP key [key ...

  8. php把网络图片转Base64编码。(php将图片链接直接转化为base64编码)

    /** 把网络图片图片转成base64 * @param string $img 图片地址 * @return string */ /*网络图片转为base64编码*/ public function ...

  9. 75、python学习第一篇

    1.sys包下边的argv方法,从控制台获取数据 ''' Created on 2017年4月8日 @author: weizhen ''' import sys One = [" * &q ...

  10. Linux下设置Core文件生成路径及文件名

    修改core dump文件路径:  方法1:临时修改: 修改/proc/sys/kernel/core_pattern文件/proc目录本身动态加载每次系统重启都会重新加载因此种方法只能作临时修改/p ...