zoukankan      html  css  js  c++  java
  • Patting Heads

    题目链接

    思路一

    O(nlogn)

    #include<bits/stdc++.h>
    using namespace std;
    int a[1000000],cnt[1000000],ans[1000000];
    int main()
    {
    	int n,maxn=0;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		cnt[a[i]]++;//统计数字个数
    		maxn=max(maxn,a[i]);
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(!ans[i])//如果这头牛的数字没有计算过
    		{
    			ans[i]=cnt[1];//1是所有数的因数
    			if(a[i]!=1) ans[i]+=cnt[a[i]];//当前数字是1的话不要加重了
    			for(int j=2;j<=sqrt(a[i]);j++)
    			{
    				if(a[i]%j==0) {
    					ans[i]+=cnt[j];
    					if(a[i]/j!=j) ans[i]+=cnt[a[i]/j];//不要加重的情况下每次加一对因数
    				}
    			}
    		}
    	}
    	for(int i=1;i<=n;i++) cout<<ans[i]-1<<"
    ";//自己就不拍自己了
    	return 0;
    }
    

    思路二

    枚举每个数i,j=i,j+=i枚举i的倍数

    orz

  • 相关阅读:
    Linux
    CUDA开发
    Linux C++
    Python
    C++
    模式识别
    Linux
    算法
    算法
    leetcode 数组,链表,跳表
  • 原文地址:https://www.cnblogs.com/qwq-/p/13696824.html
Copyright © 2011-2022 走看看