弱到一定程度了... 不过还好.又涨经 

值和姿势了.....

 

  月份和日期都比较小, (12,31) 果断暴力, 然后判定下当前月份和天数是否合法.

#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;

int day[2][13] = {
    {0,31,28,31,30,31,30,31,31,30,31,30,31 }
    ,{0,31,29,31,30,31,30,31,31,30,31,30,31 }
};
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b){
    return a*b/gcd(a,b);
}
bool key(int y){
    if( (y%400==0) || ((y%100!=0)&&(y%4==0)) ) return true;
    return false;
}

bool legal(int m, int d, int y){
    if( d <= day[ key(y) ][m] ) return true;
    return false;
}
int main(){
    int T;
    scanf("%d", &T);
    for(int Case = 1; Case <= T; Case++){        
    int x, y, z;
        scanf("%d%d%d", &x,&y,&z);
        int cnt = 0, aa,bb;    
        for(int a = 1; a <= 12; a++){
            for(int b = 1; b <= 31; b++){
                if( (gcd(a,b)==x) && (lcm(a,b)==y) ){
                    if( legal(a,b,z) ){
                        cnt++;        
                        aa = a, bb = b;    
                    }    
                }    
            } 
        }
        printf("Case #%d: ", Case);
        if( cnt == 0 ) printf("-1\n");
        else if( cnt == 1 ) printf("%d/%02d/%02d\n", z, aa, bb);
        else puts("1");
    }
    return 0;
}
View Code

相关文章: