题目背景

上次老师挑出来的(N-K)位同学很不高兴,于是他们准备自己组建合唱队形。他们请了kkk来帮忙。

题目描述

他们安排了一个动作——手拉着手唱一首歌(就是他们围成一个圈)。如果有两个相邻的同学的身高差非常大(比如姚明和一个1.5米高的人站在一起)的话,评委会感觉非常不爽。于是kkk需要帮助他们求出一种排队方案,使他们身高差距最大值最小,并输出这个最小值和这个方案。

输入输出格式

输入格式:

第一行一个整数N表示有N个人(排成一个圈)

第二行N个整数表示每个人的身高

输出格式:

第一行一个整数表示最小的身高差距最大值

第二行N个整数表示这个最优方案,如果多解输出字典序最小

输入输出样例

输入样例#1:

6
1 2 3 4 5 6
输出样例#1:

2
1,2,4,6,5,3

说明

1<=N<=6000

1<=身高<=1000

思路:

  先把身高排序

  然后我们就用一个很神奇的环来得出答案

  把1作为环的一个点

  2~n的元素如果第i个元素的i%2==1放到右边

  否则放到左边成为一个环

  然后判断哪两个之间的身高差最大

  这样就能得出来第一问的答案

  现在就是要解决字典序的问题了

  把排序后的身高进行编环

  还是把最矮的放到第一位

  然后如果第i+1个元素-第i个元素>ans

  就把第i个元素放到第最左端

  否则放到最右端

  完成后左右两端链接成为环

  从最矮的往后输出就是答案

来,上代码:

#include<cmath>
#include<cstdio>
#include<algorithm> using namespace std; struct node {
int now,dis;
};
struct node ai[],loop[]; int n,maxn,minn,num=,ans=; bool if_in[]; bool cmp(struct node SOME_1,struct node SOME_2){return SOME_1.dis<SOME_2.dis;} void sort_1()
{
int now_1=,now_2=n,now_3=,cur_1=ai[].dis;
loop[]=ai[now_3++];
while(now_3<=n)
{
if(now_3==n) loop[++now_1]=ai[now_3++];
else
{
if(ai[now_3+].dis-cur_1<=ans)
{
loop[++now_1]=ai[now_3++];
}
else
{
cur_1=ai[now_3].dis;
loop[now_2--]=ai[now_3++];
}
}
}
int v=,cnm[],now_4=;
for(int i=v;i<=n;i++) cnm[++now_4]=loop[i].dis;
for(int i=;i<v;i++) cnm[++now_4]=loop[i].dis;
for(int i=;i<n;i++) printf("%d,",cnm[i]);
printf("%d\n",cnm[n]);
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
ai[i].now=i;
scanf("%d",&ai[i].dis);
}
sort(ai+,ai+n+,cmp);
loop[++num]=ai[];
for(int i=;i<=n;i++) if(i%==) loop[++num]=ai[i];
for(int i=n;i>=;i--) if(i%==) loop[++num]=ai[i];
for(int i=;i<n;i++) ans=max(ans,abs(loop[i].dis-loop[i+].dis));
ans=max(ans,abs(loop[n].dis-loop[].dis));
printf("%d\n",ans);
sort_1();
return ;
}

合唱队形2 洛谷U5874的更多相关文章

  1. P1091 合唱队形题解(洛谷,动态规划LIS,单调队列)

    先上题目 P1091 合唱队形(点击打开题目) 题目解读: 1.由T1​<...<Ti​和Ti​>Ti+1​>…>TK​可以看出这题涉及最长上升子序列和最长下降子序列 2 ...

  2. 合唱队形2(洛谷U5874)

    题目背景 上次老师挑出来的(N-K)位同学很不高兴,于是他们准备自己组建合唱队形.他们请了kkk来帮忙. 题目描述 他们安排了一个动作--手拉着手唱一首歌(就是他们围成一个圈).如果有两个相邻的同学的 ...

  3. 洛谷 P1091 合唱队形

    \[传送门在这里呀\] 题目描述 \(N\)位同学站成一排,音乐老师要请其中的\((N-K)\)位同学出列,使得剩下的\(K\)位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次 ...

  4. 【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]

    以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...

  5. 洛谷p1091合唱队形题解

    题目 合唱队形首先要满足的是从1这个位置到中间任意的位置为单增的,从中间任意的位置到最后是单减的,且长度最长.这样才能满足出列的同学最少. 如果要满足这个条件那么我们可以先预处理出每个点的从前找的最长 ...

  6. (LIS) P1091 合唱队形 洛谷

    题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...

  7. codevs1058 合唱队形==洛谷P1091 合唱队形

    P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的 ...

  8. AC日记——合唱队形 洛谷 P1901

    题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2, ...

  9. [NOIP2004] 提高组 洛谷P1091 合唱队形

    题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2, ...

随机推荐

  1. JVM中显示锁基础AbstractQueuedSynchronizer

    在研究AbstractQueuedSynchronizer的时候我是以ReentrantLock入手的.所以理所当然会设计到一些ReentrantLock的方法.因为网上已经有很多关于AQS的文章了, ...

  2. Sublime Text3 快捷键汇总

    Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选择需要合并的多行时)Ctrl+L 选择整行(按住-继续选择下 ...

  3. sass开发过程中遇到的几个坑

    1.安装sass被墙的问题 安装完`ruby`后,打开`ruby cmd` 输入`gem install sass`,安装失败,有可能是镜像源的问题,也有可能是墙的问题. 因为公司内网的奇葩限制,各种 ...

  4. JavaScript indexOf() 方法和 lastIndexOf() 方法

    一,定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索 ...

  5. Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.

    改下build.gradle文件,将里面的compileSdkVersion改为23即可 apply plugin: 'com.android.application' android { compi ...

  6. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q125-Q126)

    Question 125You are creating an application for SharePoint Server 2010.The application will run on a ...

  7. linux服务器如何设置目录权限,让开发只能在测试目录下开发,不在线上目录上开发

    当一台服务器上,既有测试环境,也有生成的环境,开发需要在线上测试,如果开发生产环境的权限,那开发容易误操作 需求如下: (1)生产环境的代码,必须有专用的账号登陆进行管理 (2)开发测试环境的代码,开 ...

  8. ubuntu解决arm-linux-gcc no such file的问题

    这种情况是因为你的操作系统是Ubuntu 64位的,而交叉编译工具链都是32位执行程序.要成功运行这些交叉编译工具链,需要与这些工具链相关的32位库.安装命令如下:sudo apt-get insta ...

  9. NSDictionary和NSMutableDictionary

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  10. Android开发者的Git&Github(一)

    安装Git: Linux(以Ubuntu为例): sudo apt-get install git-core Windows: 访问网址http://msysgit.github.io/下载安装包 下 ...