大佬我的T1为什么只有10分???
  • 板块学术版
  • 楼主夜阑
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/21 08:30
  • 上次更新2023/11/3 23:53:14
查看原帖
大佬我的T1为什么只有10分???
243263
夜阑楼主2021/11/21 08:30

下面这个垃圾程序只有十分

#include<iostream>
#include<cstdio>
using namespace std;
int num[10000100],n; 
int t,x[200010],maxn;
int f[10000100];
bool cmp(int x){
    while(x!=0){
        if(x%10==7)return 1;
        x/=10;
    }
    return 0;
}
int main(){
    freopen("number.in","r",stdin);
    freopen("number.out","w",stdout);
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>x[i];
        maxn=max(maxn,x[i]);
    }
    if(maxn<=100)n=1000;//防tle
    else if(maxn<=1000)n=10000;//防tle
    else if(maxn<=10000)n=20000;//防tle
    else if(maxn<=2*10e5)n=4*10e5;//防tle
    else n=10000010;//防tle
    for(int i=1;i<=n;i++){//筛
        if(f[i]!=0)continue;
        if(i%7==0||cmp(i)!=0){
            //cout<<i<<':';
            for(int j=1;j*i<=n&&f[j]!=-1;j++){
                f[j*i]=-1;
                //cout<<j*i<<' ';
                num[i*j]=-1;
            }
            //cout<<endl;
        }
        else {
            f[i]=1;
        }
    }int l=1;
    for(int i=2;i<=n;i++){//找后一个数
        if(num[i]!=-1){
            num[l]=i;
            l=i;
        }
    }
    for(int i=1;i<=t;i++){//输出
        cout<<num[x[i]]<<endl;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}
2021/11/21 08:30
加载中...