IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) C. Bear and Up-Down 暴力

C. Bear and Up-Down

题目连接:

http://www.codeforces.com/contest/653/problem/C

Description

The life goes up and down, just like nice sequences. Sequence t1, t2, ..., tn is called nice if the following two conditions are satisfied:

ti < ti + 1 for each odd i < n;
ti > ti + 1 for each even i < n.
For example, sequences (2, 8), (1, 5, 1) and (2, 5, 1, 100, 99, 120) are nice, while (1, 1), (1, 2, 3) and (2, 5, 3, 2) are not.

Bear Limak has a sequence of positive integers t1, t2, ..., tn. This sequence is not nice now and Limak wants to fix it by a single swap. He is going to choose two indices i < j and swap elements ti and tj in order to get a nice sequence. Count the number of ways to do so. Two ways are considered different if indices of elements chosen for a swap are different.

Input

The first line of the input contains one integer n (2 ≤ n ≤ 150 000) — the length of the sequence.

The second line contains n integers t1, t2, ..., tn (1 ≤ ti ≤ 150 000) — the initial sequence. It's guaranteed that the given sequence is not nice.

Output

Print the number of ways to swap two elements exactly once in order to get a nice sequence.

Sample Input

5
2 8 4 7 7

Sample Output

2

Hint

题意

一个序列定义为nice的话,就是这个序列满足阶梯状。

就是如果i是偶数,那么ai>ai-1,ai>ai+1

如果i是奇数,那么ai<ai+1,ai<ai-1

现在允许你交换两个数的位置,问你一共有多少种交换方式,使得这个序列变成nice

保证一开始的序列不是nice的。

题解:

我们定义不nice的数就是不满足条件的位置。

我们可以大胆猜测一发,不nice的数一定不会有很多,因为一次交换最多影响6个数,所以我们把这些不nice的数直接扔到一个数组里面。

然后暴力去和整个序列去交换就好了。

然后check也是只用check那些不nice的位置和你交换的那个位置的数。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+7;
int n;
int a[maxn];
vector<int>tmp;
long long ans = 0;
set<pair<int,int> >S;
bool check()
{for(int i=0;i<tmp.size();i++){for(int j=-1;j<=1;j++){if(tmp[i]+j==0)continue;if(tmp[i]+j==n+1)continue;int pos = (tmp[i]+j);if(pos%2==1){if(a[pos]>=a[pos+1])return false;if(a[pos]>=a[pos-1])return false;}else{if(a[pos]<=a[pos+1])return false;if(a[pos]<=a[pos-1])return false;}}}return true;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);a[0]=1e9;if(n%2==1)a[n+1]=1e9;else a[n+1]=-1;for(int i=1;i<=n;i++){if( i & 1 ){bool ok = true;if( i + 1 <= n && a[i] >= a[i+1] ) ok = false;if( i - 1 >= 1 && a[i] >= a[i-1] ) ok = false;if( ok == false ) tmp.push_back( i );}else{bool ok = true;if( i + 1 <= n && a[i] <= a[i+1] ) ok = false;if( i - 1 >= 1 && a[i] <= a[i-1] ) ok = false;if( ok == false ) tmp.push_back( i );}}if(tmp.size()>30)return puts("0"),0;for(int i=0;i<tmp.size();i++){for(int j=1;j<=n;j++){if(tmp[i]==j)continue;swap(a[tmp[i]],a[j]);bool ok = check();if(j%2==1){if(a[j]>=a[j+1]||a[j]>=a[j-1])ok=false;}if(j%2==0){if(a[j]<=a[j+1]||a[j]<=a[j-1])ok=false;}if(ok){pair < int , int > SS = make_pair( min( tmp[i] , j ) , max( tmp[i] , j ) );if(!S.count(SS)){S.insert( SS );ans++;}}swap(a[tmp[i]],a[j]);}}cout<<ans<<endl;
}

转载于:https://www.cnblogs.com/qscqesze/p/5296520.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Silverlight 5 新特性

微软Silverlight 团队在12月9日早上低调的发布了Silverlight 第五个版本-Silverlight 5. Silverlight 5 Available is Here 这也可能是Silverlight最后一个官方主要版本. Silverlight 5 可能作为官方发布最后一个Silverlight 版本. 官方提供各方面支持直到2021年. 支持的时间相…

VMware10出现VMware Workstation 不可恢复错误: (vmx)

在我的VMware10中安装了Ubuntu12&#xff0c; 昨晚还正常关机的呢&#xff0c;今天早上一打开&#xff0c;竟然报错了&#xff0c;错误如图&#xff1a; 上网搜索了下&#xff0c;没有找到比较合适的方法&#xff0c;最后&#xff0c;我在没有卸载VMware的情况下&#xff0c;重…

DB2中ixf文件的导入导出

1. 导出数据 语法&#xff1a;EXPORT TO <文件路径>/文件名.IXF OF IXF SELECT * FROM 表名 2. 导入数据 语法&#xff1a;db2 IMPORT FROM <路径>/<文件名>.IXF OF IXF MODIFIED BY FORCECREATE COMMITCOUNT 10000 REPLACE_CREATE INTO <表名> 简单语…

mysql 新建用户无法登陆

mysql新建用户无法登陆&#xff0c;出现1045错误&#xff0c;首先要授权&#xff0c;然后更新授权&#xff0c;最后也是大家不注意的一个重要步骤&#xff0c;一定要删除匿名用户。转载于:https://www.cnblogs.com/yeahdwb/archive/2012/05/11/2496365.html

React开发(274):ant design 时间显示秒

{getFieldDecorator(assessTimeStamp, {initialValue: [moment(updateDataSource.assessStartTime),moment(updateDataSource.assessEndTime),],})(<RangePicker format"YYYY-MM-DD HH:mm:ss" showTime />)}

Ubuntu12中samba环境搭建与使用

这里简单地整理了下(最好以root身份来执行以下命令)&#xff1a; # ready: update source apt-get update# install samba software apt-get install samba apt-get install smbfs# create samba shared folder mkdir /home/zcm/work# config samba: vi /etc/samba/smb.conf se…

Android新手入门2016(10)--GridView

本文来自肥宝传说之路&#xff0c;引用必须注明出处&#xff01; GridView跟ListView一样是多控件布局。实现九宫图是最方便的。 还是先看看图&#xff0c;没图说个鸡鸡是不是 如上图&#xff0c;是一种应用方式&#xff0c;在每个格子里面&#xff0c;放入应用图标&#xff0c…

Java开发环境搭建详解

Java开发环境搭建详解 http://topic.csdn.net/u/20110829/13/BF4FAA45-3E1A-48A8-BC46-0405B7F862A2.html 一。jdk安装与配置 jdk7于3月份刚刚发布&#xff0c;目前eclipse的最新版本中还没有提供对jdk7的编译支持&#xff0c;所以我们只下载jdk6。 下载地址&#xff1a;http:…

linux查看文件和目录大小(du)

From: http://www.2cto.com/os/201210/160665.html linux查看文件和目录大小(du)起因工作中或者日常使用ubuntu时候&#xff0c;经常会遇到查看当前系统容量的情况&#xff0c;这时候就需要我们使用命令来查询当前目录或者文件的大小了目录的容量&#xff08;du&#xff09;语法…

《云计算核心技术剖析》读书笔记之一

http://book.douban.com/subject/6382788/ 通过2周的时间&#xff0c;阅读完了由吴朱华编著的《云计算核心技术剖析》一书。同时国内由CSDN协办的第四届云计算大会要开幕&#xff0c;我在这里把自己写下这本书的读书笔记。这本书是2011年出版&#xff0c;但是在这本书上对微软的…

第四周仿真作业

经过第四周关于交流电机的学习&#xff0c;我们通过对起调速特性的了解&#xff0c;进行仿真&#xff1a; 控制电机带重物上升&#xff0c;从静止加速到800r/min保持800r/min匀速运动0.5s&#xff0c;减速到静止&#xff0c;保持静止状态0.5s&#xff0c;带重物下降&#xff0c…

GVim中以十六进制方式打开文件

在windows下&#xff0c;有时我们想用GVim以十六进制形式来打开一个文件&#xff0c;下面就是不错的方法&#xff0c;将它作为一个右键菜单方式加入&#xff1a; 1. 将"GVim Hex"加入到右键菜单, 将以下内容添加到一个xxx.reg文件&#xff0c;再双击运行一次即可&am…

Cisco Nexus 1000V

Cisco Nexus 1000V包含VEM和VSM两部分&#xff0c;其中VEM运行在ESXi服务器上取代VMware原有的虚拟交换机&#xff0c;VSM是一个单独运行的虚拟机&#xff0c;提供CLI接口&#xff0c;用于管理和配置整个虚拟交换机。 Cisco Nexus 1000V的具体安装步骤如下&#xff1a; 安装环境…

HTML5背景音乐的暂停与播放

HTML代码&#xff1a; <audio id"myaudio" loop"loop" preload"auto" autoplay"autoplay"> <source src"music/纯音乐%20-%20在那遥远的地方%20-%20纯音乐版.mp3" type"audio/ogg&qu…

React开发(277):ant design time刚进入页面时间重置

activityTimeStamp.length 0? null: [moment(activityTimeStamp[0]),moment(activityTimeStamp[1])],

视频播放的基本原理

From: http://blog.csdn.net/bisword/article/details/3865000 VLC是一个功能强大的玩意&#xff0c;能做很多有意思的事情。 最简单的&#xff0c;从界面打开一个文件播放&#xff0c;也可以在命令行下使用&#xff0c;如 C:/Program Files/VideoLAN/VLC>vlc.exe test.ts 获…

React开发(278):ant design message res保证正确信息提示

callback: (res) > {console.log(res, res);if (res true) {message.success(操作成功);this.props.dispatch({type: lecturer/updateState,payload: { selectedRowKeys: [] },});this.sendSearchRequest();} else {message.error(res.returnMsg);}},