博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汕头市队赛 SRM 06 B 起伏的排名
阅读量:6094 次
发布时间:2019-06-20

本文共 1199 字,大约阅读时间需要 3 分钟。

B 起伏的排名 SRM 06

背景&&描述

    天才麻将少女KPM立志要在日麻界闯出一番名堂。

    在上个星期她打了n场麻将,每场麻将都有n名玩家。KPM自然记得自己的n次排名。
    KPM有高超的控分技巧,所以她的n次排名是1..n的一个排列。
   为了让妹子相信自己最近比赛状态起伏不定不宜外出,KPM想要从n场比赛里选出一个子序列,使得第一场排名>第二场的,第二场排名<第三场的,第三场的>第四场的....
    总之除了选出来的第一场,选出来的其他场的排名 要么<选出来的相邻两场的排名 要么>选出来的相邻两场的排名。并且第一场排名要>第二场的。
    你不需要输出具体的场次,只需要输出符合要求的子序列可能的最大长度就好了。。

    只选一场也是满足条件的。

输入格式

第一行一个整数n。

第二行n个整数,表示n场的排名。

输出格式

一个整数,表示最大的长度。

样例输入

65 2 1 6 4 3

样例输出

4

数据范围与约定

  • 对于100%的数据:1\leq n\leq 10^5

 

这道题就是求一个 大小大小大小的序列 其中大小是相对于相邻两个数而言

我们可以分情况考虑答案

1. 前一个数是 ‘大’ (定义为last)那么我们下一个数一定要比他小 这时我们考虑当前数 (定义为now)

如果now<last 很明显符合 那么答案++

如果last>=now 那么前面小于last的以及后面能<last的同样能符合now 那么我们完全可以用now代替last

2 前一个数是 ‘下' 同1

所以这个问题就转换成了求拐点数 拐点数+1就是答案了 2333

#include
#include
#include
using namespace std;int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f;}int n,ans=1,last,now,f;int main(){ n=read(); last=read(); f=1; for(int i=1;i
last&&f==-1) f=1,ans++; last=now; } printf("%d\n",ans); return 0;}
View Code

 

转载于:https://www.cnblogs.com/lyzuikeai/p/7191529.html

你可能感兴趣的文章
2013年第44周三可惡的中國聯通
查看>>
mysql导数据库用到的语句
查看>>
跨库查询(OpenDataSource)与链接服务器(Linking Server)
查看>>
Redis实现分布式锁
查看>>
Linux原始套接字实现分析---转
查看>>
UIWindow 介绍:概述、作用、主要属性及方法
查看>>
RH的NFS配置--简单OK
查看>>
Transcation And Lock--SQL SERVER 事务隔离级别
查看>>
Programmer Competency Matrix--ref--http://sijinjoseph.com/programmer-competency-matrix/
查看>>
jQuery如何设置自增自减值
查看>>
2013年度最佳 jQuery 插件集合(1) - 前端编程 - IT工作生活这点事。Just Su
查看>>
ASP.NET MVC:模块化/插件式文章汇总
查看>>
使用 Vagrant 打造跨平台开发环境
查看>>
selenium - Headless Browser and scraping - solutions - Stack Overflow
查看>>
公司------【关于真诚】
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>