社区讨论
我这个为什么最起码一个点都过不了?
P5440【XR-2】奇迹参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo2vmo4t
- 此快照首次捕获于
- 2023/10/23 20:31 2 年前
- 此快照最后确认于
- 2023/10/23 20:31 2 年前
各种情况都考虑了啊,就算复杂总不至于前几个全wa吧,题解的代码想结下来猜猜数据发现总是莫名其秒的不对。。。
写了好久了
情绪非常糟糕,特别沮丧,超级无语
难道是我题目理解出问题了吗?
拿01231222举例子,这不是123年的12月22日吗?判断日期合法,再判断1231222,1222,22这三个数字的合法性?难道不是这样吗?
我知道我的DFS内部有小问题,我可能出现重复的问题,我用了set暂时想规避这个问题,如果有大佬情愿指点迷津的话,麻烦赘述了。
救命,我的思路错在哪里了?
CPP#include <iostream>
#include <vector>
#include <set>
using namespace std;
int RN[]={0,31,29,31,30,31,30,31,30,31,30,31,30};
int PN[]={0,31,28,31,30,31,30,31,30,31,30,31,30};
int turntoint(string s){
int ans=0;
for (int i=0; i<s.length() ;i++) {
ans=ans*10+(int)(s[i]-'0');
}
return ans;
}
bool CheckYear(int year){
return (year%400==0&&year%100!=0||year%4==0);
}
bool date(string s){
int year,month,day;
string y,m,d;
for (int i=0; i<4; i++) y=y+s[i];
year=turntoint(y);
for (int i=4; i<6; i++) m=m+s[i];
month=turntoint(m);
for (int i=6; i<8; i++) d=d+s[i];
day=turntoint(d);
if(year==0) return 0;
if(month>=1&&month<=12&&day>=1){
//1闰年
if(CheckYear(year)){
if(day>RN[month]) return 0;
return 1;
}
//2平年
else{
if(day>PN[month]) return 0;
return 1;
}
}
return 0;
}
bool ss(int n){
if(n==1) return 0;
for (int i=2; i*i<=n; i++) {
if(n%i==0) return 0;
}
return 1;
}
bool SS(string s){
int year,month,day;
string y,m,d;
for (int i=0; i<8; i++) y=y+s[i];
year=turntoint(y);
for (int i=4; i<8; i++) m=m+s[i];
month=turntoint(m);
for (int i=6; i<8; i++) d=d+s[i];
day=turntoint(d);
return ss(year)&&ss(month)&&ss(day);
}
bool check(string s){
return date(s)&&SS(s);
}
int ans;
set<string>ts;
void DFS(vector<int>&p,int step,string&s){
if(step==(int)(p.size())){
if(check(s)){
ts.insert(s);
ans++;}
return;
}
for (int i=step; i<p.size(); i++) {
for (int j=0; j<10; j++) {
char c=(char)(j+'0');
s[p[i]]=c;
DFS( p, step+1, s);
}
}
return;
}
int main(){
int n;
cin>>n;
while (n--) {
ans=0;
string s;
cin>>s;
vector<int>p;
for (int i=0; i<8; i++) {
if(s[i]=='-') p.push_back(i);
}
DFS(p, 0, s);
cout<<ts.size()<<endl;
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...