51 nod 1431 快乐排队
有一群人在排队,如果某个人想排到前面去,可以花一元钱给直接站在他前面的人,然后和这个人交换位置。如果自己没有钱了,就不能和前面的人交换。
但是呢,队列里面的人觉得排他前面的所有人一定要比较有钱的,至少不能比他自己拿的少。否则里面就会有人生气。站在队头的人一定是高兴的。
现在给出一个队列的初始状态,问能不能调整队列,使得里面的人都高兴。
样例解释:样例1中,队尾的人可以和前面的人交换,变成9 10。
单组测试数据。
第一行包含一个整数n (1 ≤ n ≤ 200,000),表示队列中的人数。
第二行包含n个空格分开的整数 ai (0 ≤ ai ≤ 10^9),ai表示队列中第i个人手上拿的钱。编号从队尾开始。
对于每一组数据如果能够使得所有人高兴输出Happy,否则输出Sad。
2
11 8
2
9 8
Happy
Sad
对读入的所有数字加上其到队头的距离后的结果判重即可。
但是,为什么这样做是对的?考虑有可能造成序列不合法的数字对,必定是初始位置在前面的数值比后面的小。但是,要将这两个数移到一起,发现前者比后者小一,才能直接判断不合法。于是,需要把中间的数移开。假设中间的数字已经形成了合法的序列(如果不合法必定可以用同样的方法在中间的某个位置判断出来),如果中间的某个数字大于等于较大数,这个数字必定大于较小数,移走这个数字会给较小数加上一;如果中间的某个数字小于较大数,移走这个数字会给较大数减去一。由于中间的数字已经形成了合法的序列,满足单调不上升,因此大于等于较大数的数字都排在前面,必定可以从大到小依次通过较小数;对于较大数同理。不断地移走中间数的过程中,对于前后两者之差,任意一个中间数的影响恒为减一;因为要求两数并拢,所有中间数对两者差的综合影响恒为减去中间数的个数。于是就得到不合法状态的判断式子:存在i,j(i>j),满足a[i]-a[j]=i-j,其中a[k]表示队头起第k个数。将等式变换一下,即得:a[i]-i=a[j]-j。
注意本题中的读入是从队尾到队头的。
错因:思路题,思路出了点问题+unique去重需要排序。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int num[];
int t,n,sum,ans[];
int main(){
//freopen("small.in","r",stdin);
///freopen("small.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&num[i]);
for(int i=;i<=n;i++) ans[i]=num[i]+i;
sort(ans+,ans++n);
int cnt=unique(ans+,ans++n)-(ans+);
if(cnt!=n) cout<<"Sad"<<endl;
else cout<<"Happy"<<endl;
}
51 nod 1431 快乐排队的更多相关文章
- 51nod 1431 快乐排队
题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 有一群人在排队,如果某个人想排到前面去,可以花一元钱给直接站在他前 ...
- 51nod1431 快乐排队
神???.我们可以发现无论怎么交换ai+i都是不变的.那么这样就可以了 #include<cstdio> #include<cstring> #include<cctyp ...
- 51 nod 1439 互质对(Moblus容斥)
1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...
- 51 nod 1495 中国好区间
1495 中国好区间 基准时间限制:0.7 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是& ...
- 51 nod 1427 文明 (并查集 + 树的直径)
1427 文明 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 安德鲁在玩一个叫“文明”的游戏.大妈正在帮助他. 这个游 ...
- 51 nod 1055 最长等差数列(dp)
1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 ...
- 51 nod 1421 最大MOD值
1421 最大MOD值 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以 ...
- 51 nod 1681 公共祖先 (主席树+dfs序)
1681 公共祖先 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 有一个庞大的家族,共n人.已知这n个人的祖辈关系正好形成树形结构(即父亲向儿子连边). 在另 ...
- 51 nod 1766 树上的最远点对(线段树+lca)
1766 树上的最远点对 基准时间限制:3 秒 空间限制:524288 KB 分值: 80 难度:5级算法题 n个点被n-1条边连接成了一颗树,给出a~b和c~d两个区间,表示点的标号请你求出两个 ...
随机推荐
- [SharePoint][SharePoint Designer 入门经典]Chapter13 客户端Silverlight编程
1.使用Silverlight,CAML和Linq取得数据 2.编程性创建更新删除列表数据项 3.修饰列表和库的配置 4.管理文件和文件夹 5.修改快速启动和顶部导航条 [使用Silverlight, ...
- 组件的使用(三)AutoCompleteTextView的使用
AutoCompleteTextView经常使用的属性: android:completionHint 下拉列表以下的说明性文字 android:completionThreshold 弹出下来列表的 ...
- asp.net core 2.1开发环境下配置IIS
asp.net core 2.1是可以在开发环境下配置到IIS中的,这样就可以在vs中按F5直接运行了 在项目上右键点击属性,然后在Debug中配置如下参数 首先点击New按钮,输入IIS,点击确定 ...
- 树莓派与window 10组成的物联网核心:让人失望
去年春天,微软公布了自己的window系统与物联网系统的方案,该方案使用树莓派和window 10组成物联网的核心.树莓派是一个与window全然不同的执行在ARM构架下的系统. 是的,也许微软决心离 ...
- iOS开发之autoLayout constraint
前言 ios设备的尺寸越来越多,针对一款app可能要适配到多种设备.多种尺寸.所以.我们期望我们的app可以autoLayout.本文主要介绍在Xcode中使用constraint.未来会不定期对此文 ...
- VS2013找不到SDKDDKVer.h
今天在升级vs2010 的project的时候遇到了一个这种问题.提示:找不到SDKDKVer.h 通过查找资料发现,原来是vs版本号之间Windows SDK的路径宏定义不同,有些坑. 网上有人说能 ...
- [JavaEE] Maven简介
转载自:百度 http://baike.baidu.com/view/336103.htm?fr=aladdin 一.简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构 ...
- docker中出现容器未运行无法进入容器的操作
- Centos7 minimal 系列之Nginx搭建(三)
一.安装nginx 1.1.安装依赖包 yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install zlib zlib-d ...
- 洛谷P3707 [SDOI2017]相关分析(线段树)
题目描述 Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. Frank不仅喜欢观测,还喜欢分析观测到的数据.他经常分析两个 ...