rt,赛时推错了只得 80 的就是我。
然后发现错了尝试打暴力,得 60:
#include<iostream>
using namespace std;
int a[5000001],n;
bool f[5000001];
int main(){
f[1]=1;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(i==1)continue;
int j=1;
int k=gcd(a[i],a[i-j]);
if(k!=a[i]&&k!=a[i-j])f[k]=1;
while(i-j>0){
j++;
k=gcd(k,a[i-j]);
if(k!=a[i-j])f[k]=1;
}
}
for(int i=1;i<=n;i++)cout<<((f[i])?n:n-1)<<' ';
}
很显然是 while(i-j>0) 导致 TLE,然后我赛后把它改成了 while(j<3),就这么水灵灵的 AC 了。
心疼赛时没发现奇技淫巧的我一秒钟
所以这样的是不是应该卡一下