zoukankan      html  css  js  c++  java
  • CF 567C Geometric Progression

    题目大意:输入两个整数 n 和 k ,接下来输入n个整数组成的序列。求该序列中三个数 满足条件的子串个数(要求字串由三个整数a,b,c组成,其中 c = k * b = k * k * a)。

    思路:枚举中间的数,然后分别求出前面和后面满足条件的数的个数,将两数相乘,然后累加积即可。

      由于题目中给出的数据范围较大,且有负数,故用MAP来影射输入的序列中的每个元素。
    

    代码:

      #include<iostream>
      #include<cstdio>
      #include<cstring>
      #include<cstdlib>
      #include<cmath>
      #include<queue>
      #include<map>
      #include<algorithm>
      using namespace std;
      #define INF 0x7fffffff
    
      map<long long,long long> m;
      long long n,k,a[200001],pre[200001],late[200001];
      long long sum;
      int main(){
       while(~scanf("%I64d%I64d",&n,&k)){
    	int i;
    	m.clear();
    	sum = 0;
    	memset(pre,0,sizeof(pre));
    	memset(late,0,sizeof(late));
    	
    	for(i=1;i<=n;i++){
    		scanf("%I64d",&a[i]);
    		if(!m[a[i]])
    			m[a[i]] = i;
    	}
    	pre[m[a[1]]] ++ ;
    	for(i=2;i<=n;i++)
    	    late[m[a[i]]] ++ ; 
    	for(i=2;i<n;i++){
    		late[m[a[i]]] -- ;
    		double t = a[i]*1.0 / k;
    		long long x = t;
    		if(t != x){
    			pre[m[a[i]]] ++ ;
    			continue ;
    		}
    		sum += pre[m[x]] * late[m[x*k*k]] ;
    		pre[m[a[i]]] ++ ;
    	}
    	printf("%I64d
    ",sum);
    } 
    
    return 0;
    

    }

  • 相关阅读:
    EasyUI 常用图标
    DataGridView滚动条联动
    FTP下载工具
    C# 解析带命名空间的xml
    1.基于3.x版本vue脚手架创建新项目
    js处理异步的几种方式
    JS字符串常用方法
    git(开源的分布式版本控制系统)
    js检查数据类型的方法
    数组的常用方法
  • 原文地址:https://www.cnblogs.com/jxgapyw/p/4749495.html
Copyright © 2011-2022 走看看