zoukankan      html  css  js  c++  java
  • C

      第一次写的构造题

      给了一个长度为n的序列和一个k,要求找以k为公比的长度为3的等比数列的个数。

      这题做法就是枚举中值a[i],然后开一个mp1维护中值前的a[i]/k这个数的个数,再开一个mp2维护中值后的a[i]*k这个数的个数,2者相乘即是等比数列的个数。

    感觉这题有毒,这题我a数组开小了不re却tle

    #include<stdio.h>
    #include<map>
    using namespace std;
    typedef long long ll;
    map<ll,int>mp1;//用mp1统计中值前面的数的个数
    map<ll,int>mp2;//统计中值后面的个数
    int main()
    {
        ll k,a[200005];
        int n;
        ll ans=0;
        scanf("%d%I64d",&n,&k);
        for(int i=1;i<=n;i++)
        {
            scanf("%I64d",&a[i]);
            mp2[a[i]]++;
        }
        mp1[a[1]]++;//预处理,因为从a[2]开始枚举,所以中值前的a[1]的数量++;
        mp2[a[1]]--;
        for(int i=2;i<n;i++)
        {
            mp2[a[i]]--;//这步很关键,因为a[i]是中值,所以中值后面a[I]的个数要减1
            if(a[i]%k==0)如果如果a【i】能被k整除,说明以A[I]为中项的等比数列是存在的;
            {
                ans+=(ll)mp1[a[i]/k]*(ll)mp2[a[i]*k];
            }
            mp1[a[i]]++;
        }
       printf("%I64d
    ",ans);
        return 0;
    
    }
    
  • 相关阅读:
    我说
    时间管理
    职场自我管理
    html元素不可见的三种方式
    windows查看端口占用情况
    windows下vbs脚本隐藏控制台
    找钥匙问题
    CSS中的偏僻知识点
    竖式谜题
    node库的选择
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755022.html
Copyright © 2011-2022 走看看