为什么这个暴力代码可以过……(算不来时间复杂度求解)
查看原帖
为什么这个暴力代码可以过……(算不来时间复杂度求解)
31633
tarjen楼主2021/11/22 19:14
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
int pre[maxn],nxt[maxn];
bool flag[maxn];
bool  pd(int x){
    while(x>0){
        if((x%10)==7)return false;
        x/=10;
    }
    return true;
}
int main()
{
    //freopen("aaa.in","r",stdin);
    //freopen("aaa.out","w",stdout);
    int T;
    scanf("%d",&T);
    for(int i=1;i<=10000000;i++){
        pre[i]=i-1;
        nxt[i]=i+1;
    }
    for(int i=1;i<=10000000;i++){
        if(flag[i])continue;
        if(!pd(i)){
            for(int j=i;j<=10000000;j+=i){
                if(flag[j])continue;
                nxt[pre[j]]=nxt[j];
                pre[nxt[j]]=pre[j];
                flag[j]=true;
            }
        }
    }
    int x;
    for(int i=1;i<=T;i++){
        scanf("%d",&x);
        if(flag[x]){
            printf("-1\n");
        }
        else printf("%d\n",nxt[x]);
    }
    return 0;
}

就是知道这样子照理来说应该会t……

而且pd子函数也不是o(1)

但是谷它300ms就冲过去了

所以觉得是时间复杂度对的

但是这个咋算啊(如何估计……)

求dalao指点

2021/11/22 19:14
加载中...