#include<iostream>#include<string.h>#include<algorithm>#define N 100005#define ll long longusingnamespace std;int a[N];int d[N]={0,31,28,31,30,31,30,31,31,30,31,30,31};int judge (int year){if(year %400==0||(year %100&& year %4==0))return1;elsereturn0;}int main (){//freopen("in.txt", "r", stdin);int n;while(scanf("%d",&n)!=EOF){for(int i =0; i <8; i++){a[i]= n %10;n /=10;}sort(a, a +8);int flag =0;do{int mon = a[5]+ a[4]*10;int day = a[7]+ a[6]*10;if(mon >0&& mon <=12&& day >0&& day <=31){int year = a[0]*1000+ a[1]*100+ a[2]*10+ a[3];if(judge(year))d[2]=29;elsed[2]=28;if(mon >=1&& mon <=12&& day >=1&& day <= d[mon]){flag =1;break;}}}while(next_permutation(a, a +8));if(flag)printf("yes\n");elseprintf("no\n");}return0;}
DFS
#include<iostream>#include<string.h>#include<algorithm>#define N 100005#define ll long longusingnamespace std;int vis[N], a[N], b[N], flag;int d[N]={0,31,28,31,30,31,30,31,31,30,31,30,31};int judge (int year){//判斷閏年 if(year %400==0||(year %100&& year %4==0))return1;elsereturn0;}voiddfs(int now){if(now ==9){int day = b[7]+ b[6]*10;int mon = b[5]+ b[4]*10;int year = b[0]*1000+ b[1]*100+ b[2]*10+ b[3];if(judge(year))d[2]=29;elsed[2]=28;if(mon >0&& mon <=12&& day >0&& day <= d[mon]){flag =1;return;}}for(int i =0; i <8; i++){if(vis[i]==0){b[now]= a[i];vis[i]=1;dfs(now +1);if(flag ==1)return;vis[i]=0;}}}int main (){//freopen("in.txt", "r", stdin);int n;while(scanf("%d",&n)!=EOF){for(int i =0; i <8; i++){a[i]= n %10;n /=10;}memset(vis,0,sizeof(vis));flag =0;dfs(1);if(flag){printf("yes\n");}else{printf("no\n");}}return0;}