解题思路:枚举整个日期的区间,然后把这个日期分割成年月日,判断是否合法,如果合法再判断是否满足题目条件,满足就是答案
#include <bits/stdc++.h>
#define x first
#define y second
#define mem(h) memset(h,-1,sizeof h)
#define mcp(a,b) memcpy(a,b,sizeof b)
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair< int , int > PII;
typedef pair< double , double > PDD;
namespace IO{
inline LL read ( ) {
LL o= 0 , f= 1 ; char c= getchar ( ) ;
while ( c< '0' || c> '9' ) { if ( c== '-' ) f= - 1 ; c= getchar ( ) ; }
while ( c>= '0' && c<= '9' ) { o= o* 10 + c- '0' ; c= getchar ( ) ; }
return o* f;
}
} using namespace IO;
const int N= 1e5 + 7 , M= 2e5 + 7 , INF= 0x3f3f3f3f , mod= 1e8 + 7 , P= 131 ;
int a, b, c;
int days[ 13 ] = { 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 } ;
bool check ( int y, int m, int d) {
if ( m< 1 || m> 12 ) return false ;
if ( d== 0 ) return false ;
if ( m!= 2 ) {
if ( d> days[ m] ) return false ;
} else {
int flag= y% 100 && y% 4 == 0 || y% 400 == 0 ;
if ( d> 28 + flag) return false ;
}
return true ;
}
int main ( ) {
scanf ( "%d/%d/%d" , & a, & b, & c) ;
for ( int i= 19600101 ; i<= 20591231 ; i++ ) {
int y= i/ 10000 , m= ( i% 10000 ) / 100 , d= i% 100 ;
if ( check ( y, m, d) ) {
if ( y% 100 == a&& m== b&& d== c||
y% 100 == c&& m== a&& d== b||
y% 100 == c&& m== b&& d== a) {
printf ( "%d-%02d-%02d\n" , y, m, d) ;
}
}
}
return 0 ;
}