[USACO08DEC]拍头Patting Heads 水题

类似素数筛,暴力可过,不需要太多的优化

Code:

#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
void setIO(string a){
	freopen((a+".in").c_str(),"r",stdin);
	freopen((a+".out").c_str(),"w",stdout); 
}
void end(){
	fclose(stdin),fclose(stdout);
}
const int maxn=1000000+5;
int sum[maxn],arr[maxn],MAX,ans[maxn];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d",&arr[i]);
		++sum[arr[i]];
		MAX=max(MAX,arr[i]);
	}
	for(int i=1;i<=MAX;++i){
		if(!sum[i]) continue;
		for(int j=i;j<=MAX;j+=i) ans[j]+=sum[i];
	}
    for(int i=1;i<=n;++i){
    	printf("%d
",ans[arr[i]]-1);
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/guangheli/p/9883048.html