萌新刚学OI1s,求问这是怎么RE的???
查看原帖
萌新刚学OI1s,求问这是怎么RE的???
320548
十八子楼主2022/10/19 20:20

这个是我第一次交的代码(没写nxt数组,应该是70pts):

#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int M = 10000000;
bool flag[M];

bool check(int i){
    string tmp = to_string(i);
    for(int j=0;j<tmp.length();j++){
        if(tmp[j]=='7'){
            flag[i]=1;
            // cout<<i<<endl;
            return true;
        }
    }
    return 0;
}

void init(){
    for(int i=1;i<=M;i++){
        if(flag[i])continue;
        if(!check(i))continue;
        if(flag[i]==1){
            for(int m=2;i*m<=M;m++){
                flag[m*i]=1;
            }
        }
    }
}

signed main(){
    int n;
    cin>>n;
    // cout<<1<<endl;
    init();
    for(int i=1;i<=n;i++){
        int q;
        cin>>q;
        if(flag[q]==1){
            cout<<-1<<endl;
        }else{
            int j = q+1;
            while(j<=M and flag[j]!=0)j++;
            cout<<j<<endl;
        }
    }
    return 0;
}

之后RE了; 后来我把check的部分改成了无to_string()的写法,没问题了。 后来我又把上面代码的check部分封装成了函数,居然不re了???

#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int M = 10000000;
bool flag[M];

bool check(int i){
    string tmp = to_string(i);
    for(int j=0;j<tmp.length();j++){
        if(tmp[j]=='7'){
            flag[i]=1;
            // cout<<i<<endl;
            return true;
        }
    }
    return 0;
}

void init(){
    for(int i=1;i<=M;i++){
        if(flag[i])continue;
        if(!check(i))continue;
        if(flag[i]==1){
            for(int m=2;i*m<=M;m++){
                flag[m*i]=1;
            }
        }
    }
}

signed main(){
    int n;
    cin>>n;
    // cout<<1<<endl;
    init();
    for(int i=1;i<=n;i++){
        int q;
        cin>>q;
        if(flag[q]==1){
            cout<<-1<<endl;
        }else{
            int j = q+1;
            while(j<=M and flag[j]!=0)j++;
            cout<<j<<endl;
        }
    }
    return 0;
}

这下找不同了。 所以求助各位dalao是怎么RE的,总感觉有细节没看出来

2022/10/19 20:20
加载中...