求数据(玄关)
  • 板块灌水区
  • 楼主dalu
  • 当前回复9
  • 已保存回复9
  • 发布时间2025/1/6 20:53
  • 上次更新2025/1/7 17:40:34
查看原帖
求数据(玄关)
1416993
dalu楼主2025/1/6 20:53

我出的题T560149缺数据,我上传不了,但可以给数据生成代码和正解

数据生成代码(python):

def ran(data):
    return [i for n,i in enumerate(data) if i not in data[:n]]
import random
a = []
n = int(input())
for i in range(0,n,1):
    m = int(random.randint(1,7))
    s = random.sample('12345*67890',m)
    random.shuffle(s)
    j = 1
    while s[0] == ' ' or s[0] == '*':
        t = s[0]
        s[0] = s[j]
        s[j] = t
        j += 1
    a.append(s)
b = ran(a)
random.shuffle(b)
s = input()#读入格式:文件名.in
f = open(s,'w')
f.write(f'{len(b)}\n')
for i in range(0,len(b),1):
    for j in range(0,len(b[i]),1):
        f.write(f'{b[i][j]}')
    f.write('\n')

正解(c++):

#include <iostream>
using namespace std;

string s;
bool flag;
bool f[10000005];

void get(){
    f[0] = f[1] = true;
    for(int i = 2;i <= 10000000;i++){
        if(!f[i]){
            for(int j = i + i;j <= 10000000;j += i){
                f[j] = true;
            }
        }
    }
}

void dfs(int k){
    if(k == s.size()){
        if(!f[stoi(s)]) flag = true;
        return;
    }
    if(s[k] == '*'){
        for(char ch = '0';ch <= '9';ch++){
            s[k] = ch;
            dfs(k + 1);
            if(flag) return;
            s[k] = '*';
        }
    }else dfs(k + 1);
}

int main(){
    string s1,s2;
    cin >> s1;//读入格式:文件名
    s2 = s1;
    s1 += ".in";
    s2 += ".out";
    freopen(s1.c_str(),"r",stdin);
    freopen(s2.c_str(),"w",stdout);
    get();
    int t;
    cin >> t;
    while(t--){
        cin >> s;
        flag = false;
        dfs(0);
        cout << (flag ? s : "-1") << '\n';
    }
    return 0;
}
2025/1/6 20:53
加载中...