得分0帮忙找一下问题QAQ
查看原帖
得分0帮忙找一下问题QAQ
1476442
LINK_ccs楼主2025/7/27 22:10
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int T, num = 0;

int f(string str) {
    int a = 0;
    for (int i = 0; i < str.size(); i++) {
        if (str[i] == '-') {
            return -1;
        }
        a = a * 10;
        a += str[i] - '0';
    }
    return a;
}

bool hf_date(int y, int m, int d) {

    int month[13] = {0, 31, 30, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (m < 1 || m > 12) return false;
    if (m != 2) {
        return d >= 1 && d <= month[m]; 
    } else {
        int M;
        if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) M = 29;
        else M = 28;
        return d >= 1 && d <= M; 
    }
}

bool isPrime(int a) {
    if (a <= 1) return false; 
    for (int i = 2; i * i <= a; i++) {
        if (a % i == 0) return false;
    }
    return true;
}

void dfs(int zb, int n, string str, vector<int> vec) {
    if (zb == n) {
        int y = f(str.substr(0, 4));
        int m = f(str.substr(4, 2));
        int d = f(str.substr(6, 2));
        if (y == -1 || m == -1 || d == -1) return;
        if (hf_date(y, m, d)) {
            if (isPrime(y) && isPrime(m) && isPrime(d) &&
                isPrime(m * 100 + d) && 
                isPrime(y * 10000 + m * 100 + d)) num++;
        }
        return;
    }
    
    int y = f(str.substr(0, 4)); 
    int m = f(str.substr(4, 2)); 
    int d = f(str.substr(6, 2)); 
    
    if (y != -1 && !isPrime(y)) return;
    if (m != -1 && (m < 1 || m > 12 || !isPrime(m))) return; 
    if (d != -1 && (d < 1 || d > 31 || !isPrime(d))) return; 
    
    for (int i = 0; i <= 9; i++) {
        string str1 = str;
        str1[vec[zb]] = char(i + '0');
        dfs(zb + 1, n, str1, vec);
    }
}

int main() {
    cin >> T;
    for (int i = 1; i <= T; i++) {
        string str;
        cin >> str;
        vector<int> vec;
        int all = 0;
        for (int j = 0; j < 8; j++)
            if (str[j] == '-') {
                vec.push_back(j);
                all++;    
            }
        num = 0;
        dfs(0, all, str, vec);
        cout << num << endl;
    }
    return 0;
}
2025/7/27 22:10
加载中...