求优化时间复杂度

P3955 [NOIP2017 普及组] 图书管理员

difficultlong @ 2024-10-02 08:28:31

#include<bits/stdc++.h>
using namespace std;
int n,q;
int tb[1001],fh[1001][9],xbc[1001],xb[1001];
int main(){
    scanf("%d%d",&n,&q);
    for(int i=1;i<=n;i++){
        scanf("%d",&tb[i]);
    }
    for(int i=1;i<=q;i++){
        scanf("%d%d",&xbc[i],&xb[i]);

    }
    sort(tb+1,tb+n+1);
    for(int i=1;i<=n;i++){
        int a=tb[i];
        int j=1;
        while(a){
            fh[i][j]=a%10;
            a/=10;
            j++;
        }
    }
    bool flag;
    for(int i=1;i<=q;i++){
        int a=xb[i],m[9];
        int j=1;
        while(j<=xbc[i]){
            m[j]=a%10;
            a/=10;
            j++;
        }
        for(int k=1;k<=n;k++){
            int l=1;
            flag=true;
            while(l<=xbc[i]){
                if(m[l]!=fh[k][l]){
                    flag=false;
                    break;
                }
                l++;
            }
            if(flag){
                printf("%d\n",tb[k]);
                break;
            }
        }
        if(!flag){
            printf("-1\n");
        }
    }
    return 0;
}

本代码的错误已经修正(大佬指出了错误我才发现我犯的是那么低级的错误!!!气杀我也)

但是代码的时间复杂度太大了(没想到竟然没有超时!!!不知道是数据水,还是时间限制太松了)

求优化时间复杂度


by run_away @ 2024-10-02 08:58:30

@difficultlong 事实上 10^3 的数据 O(n^3) 可能还跑不满的复杂度在洛谷上面一般能过


|