题意:给定n个数a1,a2,...,an,对于一个数ai,求出其余n-1个数中能整除ai的数的个数
首先,题意有误,并不是编号整除ai,而是其他牛纸条上的数整除ai
其次,数据范围有误,10^5会RE,10^6可过
最后,很容易发现如果一个一个找会被卡死,所以记录下数值相同的出现的次数,直接往后推就可以了
var
n,m,x :longint;
i :longint;
a,ans,num :array[0..1000010] of longint;
begin
read(n); m:=0;
for i:=1 to n do
begin
read(a[i]);
inc(num[a[i]]);
if a[i]>m then m:=a[i];
end;
for i:=1 to m do
if (num[i]>0) then
begin
x:=i*2;
while (x<=m) do
begin
inc(ans[x],num[i]);
x:=x+i;
end;
end;
for i:=1 to n do writeln(ans[a[i]]+num[a[i]]-1);
end.
——by Eirlys