题解 CF719A 【Vitya in the Countryside】

CF719A 【Vitya in the Countryside】,if好题,你值得拥有。


题目大意就是给出月亮盈亏,然后预测下面的情况。

来看一个图:

4.4tj1.png

(手工绘制,不要在意美观细节。)

很显然的两个点:

  1. 当题目数据同 A、E 相同时,答案是UP

  2. 当题目数据同 C 相同时,答案是DOWN

因为 A 段是单调上升的,B段是单调下降的。

那么当题目数据是 ABC 三段或者 CDE 三段呢?

很显然前者UP,后者DOWN

因为无论前面怎么变,最后预测还是看最后一段上升或下降的曲线。

而判断一个曲线最后的方向,只需看两个数据,因为2个数据是最短的能够判断升降序的序列。

由此,我们得出一般性结论(敲黑板):

当前序列(\(\mathtt {len \ge 2}\))最后的升降序,由最后两个数据决定。

但是!

如果序列像 AB 或者 CD 呢?

由于 B 点和 D 点分别是峰顶和峰底,下面的数据会峰回路转,所以先进行对最后一个数据的判断:

如果这个数据是15,那么输出升序;

如果这个数据是0,那么输出降序。

还有一种特殊情况,当 \(len == 1\) 时,除上述为 15 和 0 的情况外,其他的数字都无法判断下面的是升序还是降序。理由就是2个数据是最短的能够判断升降序的序列

分析结束,喜闻乐见上代码。

#include<bits/stdc++.h>
using namespace std;
int main() {
	int va1,va2,n;
	cin>>n;
	for(int i=1;i<n;i++) cin>>va1;
	cin>>va2;
	if(va2==15) puts("DOWN");//特判1
	else if(va2==0) puts("UP");//特判2
	else if(n==1) puts("-1");//序列len==1,无法判断
	else if(va2>va1) puts("UP");//升序
	else puts("DOWN");//降序
	return 0;
}

猜你喜欢

转载自www.cnblogs.com/ahawzlc/p/12636889.html
今日推荐