#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int a[N];
bool v[20240000];//检查是否重复
int ans;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int data){
if(v[data]==1) return false;
v[data]=1;
int month=data%10000/100;
if(month<1 || month>12) return false;
int day=data%100;
if(day<1 || day>days[month]) return false;
return true;
}
void dfs(int n,int pos,int data){
if(n==100) return ;
if(pos==8 && check(data)){
ans++;
return ;
}
if((pos==0 && a[n]==2 )||
(pos==1 && a[n]==0 )||
(pos==2 && a[n]==2 )||
(pos==3 && a[n]==3 )||
(pos==4 && a[n]>=0 && a[n]<=1 )||
(pos==5 && a[n]>=0 && a[n]<=9 )||
(pos==6 && a[n]>=0 && a[n]<=3 )||
(pos==7 && a[n]>=0 && a[n]<=9 ))
dfs(n+1,pos+1,data*10+a[n]);
dfs(n+1,pos,data);
}
int main() {
for(int i=0;i<100;i++){
cin>>a[i];
}
dfs(0,0,0);
cout <<ans<<endl;
return 0;
}
蓝桥:日期统计2023省赛(DFS)
最新推荐文章于 2024-08-27 17:53:55 发布