Codeforces World Finals(模拟)

B. Codeforces World Finals
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

The king Copa often has been reported about the Codeforces site, which is rapidly getting more and more popular among the brightest minds of the humanity, who are using it for training and competing. Recently Copa understood that to conquer the world he needs to organize the world Codeforces tournament. He hopes that after it the brightest minds will become his subordinates, and the toughest part of conquering the world will be completed.

The final round of the Codeforces World Finals 20YY is scheduled for DD.MM.YY, where DD is the day of the round, MM is the month and YY are the last two digits of the year. Bob is lucky to be the first finalist form Berland. But there is one problem: according to the rules of the competition, all participants must be at least 18 years old at the moment of the finals. Bob was born on BD.BM.BY. This date is recorded in his passport, the copy of which he has already mailed to the organizers. But Bob learned that in different countries the way, in which the dates are written, differs. For example, in the US the month is written first, then the day and finally the year. Bob wonders if it is possible to rearrange the numbers in his date of birth so that he will be at least 18 years old on the day DD.MM.YY. He can always tell that in his motherland dates are written differently. Help him.

According to another strange rule, eligible participant must be born in the same century as the date of the finals. If the day of the finals is participant's 18-th birthday, he is allowed to participate.

As we are considering only the years from 2001 to 2099 for the year of the finals, use the following rule: the year is leap if it's number is divisible by four.

Input

The first line contains the date DD.MM.YY, the second line contains the date BD.BM.BY. It is guaranteed that both dates are correct, and YY and BY are always in [01;99].

It could be that by passport Bob was born after the finals. In this case, he can still change the order of numbers in date.

Output

If it is possible to rearrange the numbers in the date of birth so that Bob will be at least 18 years old on the DD.MM.YY, output YES. In the other case, output NO.

Each number contains exactly two digits and stands for day, month or year in a date. Note that it is permitted to rearrange only numbers, not digits.

Sample test(s)
input
01.01.98
01.01.80
output
YES
input
20.10.20
10.02.30
output
NO
input
28.02.74
28.02.64
output
NO

 

      题意:

      给出两个日期,第二个日期是可以任意交换的,问第二个时间到第一个时间能否大于等于18岁。

 

      思路:

      简单模拟。注意日期的判断还有常闰年的判断,交换的时间可能会不满足交换的条件,判断的时候写到同一个函数判断比较思路清晰。

 

      AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int dd, mm, yy;

bool test (int d, int m, int y) {
        if (y < 1 || y > 99) return 0;
        if (m < 1 || m > 12) return 0;
        if (m == 4 || m == 6 ||
            m == 9 || m == 11) {
                    if (d > 30) return 0;
        } else if (m == 2) {
                int year = 2000 + y;
                if (y % 4 && d > 28) return 0;
                if (!(y % 4) && d > 29) return 0;
        } else if (d > 31) return 0;

        if (yy - y > 18) return 1;
        if (yy - y == 18 && mm - m > 0) return 1;
        if (yy - y == 18 && mm - m == 0 && dd - d >= 0) return 1;

        return 0;
}

int main() {

        int a, b, c;
        scanf("%d.%d.%d", &dd, &mm, &yy);
        scanf("%d.%d.%d", &a, &b, &c);

        if (test(a, b, c) || test(a, c, b) ||
            test(b, a, c) || test(b, c, a) ||
            test(c, b, a) || test(c, a, b))
            puts("YES");
        else puts("NO");

        return 0;
}

 

 

你可能感兴趣的:(codeforces)