社区讨论
0pts求调.exe
P5440【XR-2】奇迹参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m00w5p6t
- 此快照首次捕获于
- 2024/08/19 19:07 2 年前
- 此快照最后确认于
- 2025/11/04 23:02 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
string s;
bool pd(int x) {
for (int i = 2; i <= x / i; i++)
if (x % i == 0) return false;
return true;
}
int res;
int n;
int num[10];
bool check(int y, int m, int d) {
if (1 <= y && y <= 9999) {
if (1 <= m && m <= 12) {
if (d >= 1) {
if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) return d <= 31;
else if (m == 2) {
if (y % 100 == 0) {
if (y % 400 == 0) {
return d <= 29;
} else {
return d <= 28;
}
} else {
if (y % 4 == 0) {
return d <= 29;
} else {
return d <= 28;
}
}
} else return d <= 30;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
void dbg() {
cout << "-----\n";
for (int i = 1; i <= 8; i++) {
cout << num[i] << " ";
}
cout << "-----\n";
}
void dfs(int idx) {
if (idx > n) {
int y, m, d;
y = m = d = 0;
for (int i = 1; i <= 8; i++)
if (1 <= i && i <= 4) y = y * 10 + num[i];
else if (5 <= i && i <= 6) m = m * 10 + num[i];
else d = d * 10 + num[i];
int i1 = d;
int i2 = m * 100 + d;
int i3 = y * 10000 + m * 100 + d;
if (check(y, m, d) && pd(i1) && pd(i2) && pd(i3))
res++;
return;
}
if (s[idx] != '-') dfs(idx + 1);
else {
for (int i = 0; i <= 9; i++) {
num[idx] = i;
dfs(idx + 1);
num[idx] = -1;
}
}
}
int main() {
int t;
cin >> t;
while (t--) {
cin >> s;
n = s.size();
s = ' ' + s;
for (int i = 1; i <= n; i++)
if (s[i] != '-') num[i] = s[i] - '0';
res = 0;
dfs(1);
cout << res << endl;
}
return 0;
}
WA on #1~#7
TLE on #9 4.2s
WA+TLE on #8,#10
求调.exe
回复
共 1 条回复,欢迎继续交流。
正在加载回复...