void init () { int y , m , d; AddDay ( 2001 , 11 , 2 ); for ( y = 2001 ; y >= 1900; y -- ) for ( m = 12; m > 0; m -- ) for ( d = 31; d > 0; d -- ) { if ( !live ( y , m , d ) ) continue; if ( y == 2001 && m == 11 && d == 4 ) Win [y] [m] [d] = 0; else if ( AddDay ( y , m , d ) || AddMonth ( y , m , d ) ) Win [y] [m] [d] = 1; else Win [y] [m] [d] = 0; } }
void AddDay( Date& d ) { switch( d.month ) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { if( d.day < 31 ) ++d.day; else { d.day = 1; AddMonth( d ); } } case 4: case 6: case 9: case 11: { if( d.day < 30 ) ++d.day; else { d.day = 1; AddMonth( d ); } break; } case 2: { if( d.day < 28 ) ++d.day; else { if( d.year % 400 ) //leap year { if( d.day == 29 ) { d.day = 1; AddMonth( d ); } else ++d.day; } else if( d.year % 100 ) //not leap year { d.day = 1; AddMonth( d ); } else if( d.year % 4 ) //leap year { if( d.day == 29 ) { d.day = 1; AddMonth( d ); } else ++d.day; } else //not leap year { d.day = 1; AddMonth( d ); } } break; } } }