#include<bits/stdc++.h>
#include<algorithm>
#include<vector>
using namespace std;
int a[100], ans;
bool vis[20240000];
bool check(int data)
{
if(vis[data])//日期已经访问过了
{
return false;
}
vis[data] = 1;
int mm = data / 100 % 100;
int dd = data % 100;
if(mm<1 || mm > 12)//月份是否合法
{
return false;
}
if(mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12)
{
if(dd>=1 && dd<= 31)
{
return true;
}
}
else if(mm == 2)
{
if(dd >= 1 && dd <= 28)
{
return true;
}
}
else if(dd >= 1 && dd <= 30)
{
return true;
}
else
{
return false;
}
}
void dfs(int x,int pos,int data)//x为遍历的下标 ,pos为当前八位遍历下标的位置,data为日期
{
if(x == 100)
{
return ;
}
if(pos == 8)
{
if(check(data))
{
++ans;
}
return ;
}
if((pos == 0 && a[x] == 2) ||
(pos == 1 && a[x] == 0) ||
(pos == 2 && a[x] == 2) ||
(pos == 3 && a[x] == 3) ||
(pos == 4 && a[x] >= 0 && a[x] <= 1) ||
(pos == 5 && a[x] >= 0 && a[x] <= 9) ||
(pos == 6 && a[x] >= 0 && a[x] <= 3) ||
(pos == 7 && a[x] >= 0 && a[x] <= 9))
{
dfs(x+1,pos+1,data*10+a[x]);//选上了
}
dfs(x+1,pos,data);
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);
for(int i = 0;i < 100;i++)
{
cin>>a[i];
}
dfs(0,0,0);
cout<<ans<<endl;
return 0;
}
0 回复
0 转发
0 喜欢
1 阅读



