题目链接:http://codeforces.com/contest/567/problem/C

题意就是有n个数现在要让 ai aj  ak 构成公比为K的等比数列(i < j < k);求有多少种组合方法;

我们可以对 a[i] 找 a[i]/k 和 a[i]*k ,设a[i]前面有 x个a[i]/k ;后面有y个 a[i]*k ;那么答案就是所有的x*y的和;由于数据比较大无法引用下标, 所以用map离散一下

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <algorithm>
  5. #include <math.h>
  6. #include <vector>
  7. #include <map>
  8. #include <string>
  9. using namespace std;
  10. #define INF 0x3f3f3f3f
  11. #define met(a, b) memset(a, b, sizeof(a))
  12. #define N 200005
  13. typedef long long LL;
  14.  
  15. int main()
  16. {
  17. int n;
  18.  
  19. LL k, a[N];
  20.  
  21. while(scanf("%d %I64d", &n, &k)!=EOF)
  22. {
  23. map<LL, LL> mp1, mp2;
  24.  
  25. for(int i=; i<=n; i++)
  26. {
  27. scanf("%I64d", &a[i]);
  28.  
  29. mp1[a[i]]++;
  30. }
  31.  
  32. LL ans = ;
  33.  
  34. for(int i=n; i>=; i--)///倒着来便于统计mp2[x]的个数,即倒着来的数的个数;
  35. {
  36. mp1[a[i]] --;///正着来的要减减;
  37.  
  38. if(a[i]%k==)
  39.  
  40. ans += mp1[a[i]/k] * mp2[a[i]*k];
  41.  
  42. mp2[a[i]] ++;
  43. }
  44.  
  45. printf("%I64d\n", ans);
  46. }
  47. return ;
  48. }

这是一个用二分写的,不用map离散化的代码;

  1. LL a[maxn], b[maxn], l[maxn], r[maxn], n, m;
  2. LL bin_sreach (LL x)
  3. {
  4. LL high = m-, low = ;
  5. while (high >= low)
  6. {
  7. LL mid = (high + low) / ;
  8. if (b[mid] == x)
  9. return mid;
  10. if (b[mid] < x)
  11. low = mid + ;
  12. else
  13. high = mid -;
  14. }
  15. return n;
  16. }
  17. int main ()
  18. {
  19. LL k;
  20. while (scanf ("%I64d %I64d", &n, &k) != EOF)
  21. {
  22. for (LL i=; i<n; i++)
  23. {
  24. scanf ("%I64d", &a[i]);
  25. b[i] = a[i];
  26. }
  27. sort (b, b+n);
  28. m = unique(b, b+n) - b;
  29. memset (l, , sizeof(l));
  30. memset (r, , sizeof(r));
  31. for (LL i=; i<n; i++)
  32. {
  33. LL x = bin_sreach(a[i]);
  34. l[x] ++;
  35. }
  36. __int64 ans = ;
  37. for (LL i=n-; i>=; i--)
  38. {
  39. LL x, y, z;
  40. x = y = n;
  41. z = bin_sreach(a[i]);
  42. l[z] --;
  43. if (a[i] % k == )
  44. x = bin_sreach(a[i]/k);
  45. y = bin_sreach(a[i]*k);
  46. ans += l[x] * r[y];
  47. r[z] ++;
  48. }
  49. printf ("%I64d\n", ans);
  50. }
  51. return ;
  52. }

Geometric Progression---cf 567C(求组合方式,map离散)的更多相关文章

  1. CodeForces 567C. Geometric Progression(map 数学啊)

    题目链接:http://codeforces.com/problemset/problem/567/C C. Geometric Progression time limit per test 1 s ...

  2. CodeForces 567C Geometric Progression

    Geometric Progression Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  3. Codeforces Round #Pi (Div. 2) C. Geometric Progression map

    C. Geometric Progression Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  4. map Codeforces Round #Pi (Div. 2) C. Geometric Progression

    题目传送门 /* 题意:问选出3个数成等比数列有多少种选法 map:c1记录是第二个数或第三个数的选法,c2表示所有数字出现的次数.别人的代码很短,思维巧妙 */ /***************** ...

  5. CF 567C(Geometric Progression-map)

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

  6. Codeforces 567C:Geometric Progression(DP)

    time limit per test : 1 second memory limit per test : 256 megabytes input : standard input output : ...

  7. 加和求不同的组合方式数目(dp)

    描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如: n=5,5个数分别为1,2,3,4,5,t=5: 那么可能的组合有5=1+4和5=2+3和5=5三种组合方式. 输入 输入的第 ...

  8. hdu 5278 Geometric Progression 高精度

    Geometric Progression Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contes ...

  9. Codeforces Round #Pi (Div. 2) C. Geometric Progression

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

随机推荐

  1. Apache Avro:一个新的数据交换格式

    原文: http://blog.cloudera.com/blog/2009/11/avro-a-new-format-for-data-interchange/ 注:由于个人英语能力有限,翻译不准确 ...

  2. 一款基于的jQuery仿苹果样式焦点图插件

    这次我们要分享的这款jQuery焦点图非常特别,它的外观特别简单,但是又相当大气.焦点图的整体样式是仿苹果样式的,由于jQuery的运用,我们只要点击图片下方的缩略图即可达到图片切换的焦点图特效,这款 ...

  3. vsftpd 服务移植出现 500 oops : socket 解决

    一开始, 在vsftpd 打印的错误是 500 oops : socket 在 vsftpd 源码里面找到 buildroot-2016.05/output/build/vsftpd-3.0.3/sy ...

  4. How to activate maven profile inside eclipse

    How to activate maven profile inside eclipse Normally maven is use for project dependency management ...

  5. 解决异常:Package should contain a content type part [M1.13]

    http://blog.csdn.net/llwan/article/details/8890190 ————————————————————————————————————————————————— ...

  6. 并查集 - UVALive 6889 City Park

    City Park Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=129725 Mean: 在 ...

  7. Hadoop周边生态软件和简要工作原理(一)

    转自:http://www.it165.net/admin/html/201307/1531.html 基本都是在群里讨论的时候,别人问的入门问题,以后想到新的问题再补充进来.但是其实入门问题也很重要 ...

  8. CSS旋转&翻转,兼容方案

    CSS代码,高级浏览器使用transform,ie用滤镜实现. 转自http://aijuans.iteye.com/blog/19364921 /*水平翻转*/ 2 .flipx { 3 -moz- ...

  9. 梯度下降算法到logistic回归

    http://sbp810050504.blog.51cto.com/2799422/1608064/ http://blog.csdn.net/dongtingzhizi/article/detai ...

  10. 第二百八十节,MySQL数据库-外键链表之一对多,多对多

    MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...