2022/1/20总结

今天仍然没有完成昨天定下来的任务Orz

为什么题目可以这么难啊。

今天早上一直在做青蛙,好不容易有个全新的思路样例能过,结果给WA了,又改了几个小时,发现还是WA,于是去做下一题了。还好,下一题不那么搞心态,不过也仅仅是下一题不搞心态了... ...其它的题目完全不会。

今天又去看了看Acwing要录的题目,很好,是我做不出来的题目的升级版。跟题目纠结了差不多一个小时,还是选择放弃了。(给我整沉默了)


题目描述

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.

输入格式

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.

输出格式

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.

题意翻译

题意描述

关于 Codeforces 的网站 king Copa 经常被报道,使得它在要使用网站进行训练和比赛的人之间迅速流行开来。最近, Copa 明白,要征服世界,他需要组织世界 Codeforces 锦标赛。他希望在这次比赛之后之后,最聪明的人将成为被挑选出来成为他的下属,然后征服世界最艰难的部分将会完成。

Codeforces 世界总决赛的最后一轮定于 YY 年 MM 月 DD 日举行,其中 DD 是当天的日期, MM 是当月的月份, YY 是当年的年份的最后两位。Bob 很幸运地能成为来自 Berland 的一名决赛选手。但有一个问题:根据比赛规则,所有参赛者在决赛时必须年满 18 岁。 Bob 出生于 BY 年, BM 月,BD 日。这个日期记录在他的护照上,他的护照复印件已经寄给了组织者。但是 Bob 了解到,在不同的国家,日期的书写方式是不同的。例如,在美国,先写月份,然后写日期,最后写年份。

鲍勃想知道是否有可能重新排列他出生日期的数字,以便他在 YY 年, MM 月, DD 日那天至少 18 岁。他看出,在他的祖国,日期写的顺序不一样。请帮帮他。 根据另一个奇怪的规则,合格的参赛者必须与决赛日期出生在同一个世纪。如果决赛当天刚好是参赛者的 18 岁生日,则他可以参加。

因为我们只考虑从 2001 年到 2099 年的决赛年份,所以使用以下规则:如果年份的数字可以被 4 整除,那么年份就是闰年。

输入格式:

第一行包括三个数字 DD,MM,YY ,第二行包括三个数字 BD,BM,BY ,数据保证两个日期的正确性,并且 BY 和 YY 保证在[01,99] 中。

输出格式:

如果可能通过重新排列出生日期的顺序,让 Bob 在比赛当天至少 18 岁,则输出 YES 。如果不能,则输出 NO。

输入输出样例

输入 #1复制

01.01.98
01.01.80

输出 #1复制

YES

输入 #2复制

20.10.20
10.02.30

输出 #2复制

NO

输入 #3复制

28.02.74
28.02.64

输出 #3复制

NO

这题之前一直以为比较复杂,不过仔细看过来发现没那么复杂。情况是什么呢,就是3个数的排列组合,一共6种,比较它们到比赛日期时是不是满18周岁,即 BY + 18 < YY 或 (BY + 18 = YY 且 BM < MM) 或 (BY + 18 = YY 且 BM = MM 且 BD <= DD),因为情况比较少直接暴力找就可以,注意一下年月日范围和闰年特殊性就可以了。错了几次加了特判AC了。详见代码

#include <bits/stdc++.h>

using namespace std;

int DD, MM, YY, BD, BM, BY;
int require;
int mon[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/*
	abc, acb, bac, bca, cab, cba
*/

bool CalDays(int D, int M, int Y)
{
	if(M < 1 || M > 12 || D < 1 || D > mon[M - 1] + int(M == 2 && Y % 4 == 0))
		return 0;
	return (Y + 18 < BY || (Y + 18 == BY && M < BM) || (Y + 18 == BY && M == BM && D <= BD)); 
}

void Calculate()
{
	if(CalDays(DD, MM, YY))
	{
		cout << "YES";
		return;
	}
	if(CalDays(DD, YY, MM))
	{
		cout << "YES";
		return;
	}
	if(CalDays(MM, DD, YY))
	{
		cout << "YES";
		return;
	}
	if(CalDays(MM, YY, DD))
	{
		cout << "YES";
		return;
	}
	if(CalDays(YY, DD, MM))
	{
		cout << "YES";
		return;
	}
	if(CalDays(YY, MM, DD))
	{
		cout << "YES";
		return;
	}
	cout << "NO";
}

int main()
{
	scanf("%d.%d.%d", &BD, &BM, &BY);
	scanf("%d.%d.%d", &DD, &MM, &YY);
	Calculate();
	return 0;
}

明天1题,1题总行了吧?!不可能1题都过不了吧... ...

或者明天可以尝试一下其他方面的知识点的题目了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ISansXI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值