hdu1201

18岁生日

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18823    Accepted Submission(s): 6006
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1201

Problem Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
 

Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
 

Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
 

Sample Input
 
   
1 1988-03-07
 

Sample Output
 
   
6574
解题思路:
首先说不成立的条件,那就是他的生日是闰年2月29号,此时输出-1。(因为四年一闰,18 % 4 == 2,
所以如果当前是闰年,那18岁指定没戏了)。
然后是第二个难点,把当前年和18岁那年合并为一年,这里以月为判断条件,如果是2月份(不包含2月份)
的,,那么按第18年算;2月份(包含2月份) 以下的,那么按第0年算。
完整代码:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#pragma comment(linker, "/STACK:102400000,102400000")

typedef long long LL;
typedef double DB;
typedef unsigned uint;
typedef unsigned long long uLL;

/** Constant List .. **/ //{

const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const DB EPS = 1e-9;
const DB OO = 1e20;
const DB PI = acos(-1.0); //M_PI;

bool run(int y)
{
    if( (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0) )
        return true;
    return false;
}

int main()
{
    #ifdef DoubleQ
    freopen("in.txt","r",stdin);
    #endif
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int y,m,d;
        scanf("%d-%d-%d",&y,&m,&d);
        if( run( y ) && m == 2 && d == 29 )
        {
            printf("-1\n");
            continue;
        }
        int sum = 365 * 18;
        if(m >= 3)
        {
            for(int i = 1; i <= 18 ; i ++)
                if(run(i + y))
                sum ++;
        }
        else
        {
            for(int i = 0 ; i < 18; i ++)
                if(run(i + y))
                    sum ++;
        }
        printf("%d\n",sum);
    }
}


你可能感兴趣的:(HDU)