洛谷:P2926 [USACO08DEC]Patting Heads S(数学。普及/提高-)
程序员文章站
2024-01-07 21:19:28
...
题目:
代码:我是用之前的数组前递和排序,替换:map和set:竟然超时了。
#include<bits/stdc++.h>
using namespace std;
int A1[100001],A2[100001];
int D[1000005];
int cnt[1000005];
int main()
{
int n;
cin>>n;
memset(D,0,sizeof(D));
memset(cnt,0,sizeof(cnt));
for(int i=0;i<n;i++)
{
cin>>A1[i];
A2[i]=A1[i];
cnt[A1[i]]++;
}
sort(A1,A1+n);
int last=A1[0];
int n2=1;
for(int i=1;i<n;i++)
{
if(A1[i]==last) continue;
A1[n2]=A1[i];
n2++;
last=A1[i];
}
for(int i=0;i<n2;i++)
{
for(int j=i+1;j<n2;j++)
{
if(A1[j]%A1[i]==0)
{
D[A1[j]]+=cnt[A1[i]];
}
}
}
for(int i=0;i<n;i++)
{
cout<<D[A2[i]]+cnt[A2[i]]-1<<endl;
}
}