洛谷 U5874 合唱队形2

来源:互联网 发布:windows7重置网络 编辑:程序博客网 时间:2024/05/20 19:17

题目背景

上次老师挑出来的(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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

二分+思路~

二分答案,贪心判断该答案是否可行,然后再贪心求出答案序列。


#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int n,a[6001],tot,l,r,maxx,minn,k,z,be,ed,ans[6001];bool b[6001],flag;bool jud(int u){memset(b,0,sizeof(b));tot=k=z=1;b[1]=1;while(1){flag=0;for(int i=1;i<=n;i++)  if(!b[i] && abs(a[i]-a[k])<=u)  {  k=i,tot++,b[i]=1,flag=1;break;  }for(int i=n;i;i--)  if(!b[i] && abs(a[z]-a[i])<=u)  {  z=i,tot++,b[i]=1,flag=1;break;  }if(!flag) break;}if(abs(a[k]-a[z])<=u && tot==n) return 1;return 0;}int main(){scanf("%d",&n);minn=1000;for(int i=1;i<=n;i++){scanf("%d",&a[i]);maxx=max(maxx,a[i]);minn=min(minn,a[i]);}sort(a+1,a+n+1);l=0;r=maxx-minn;while(l<r){int mid=(l+r)>>1;if(jud(mid)) r=mid;else l=mid+1;}if(!jud(l)) l++;printf("%d\n",l);k=z=be=1;ed=n+1;ans[1]=a[1];memset(b,0,sizeof(b));b[1]=1; while(1){flag=0;for(int i=1;i<=n;i++)  if(!b[i] && abs(a[i]-a[k])<=l)  {  b[i]=1;k=i;ans[++be]=a[i];flag=1;break;  }for(int i=n;i;i--)  if(!b[i] && abs(a[z]-a[i])<=l)  {  b[i]=1;z=i;ans[--ed]=a[i];flag=1;break;  }if(!flag) break;}for(int i=1;i<n;i++) printf("%d,",ans[i]);printf("%d\n",ans[n]);return 0;}


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 出月子大腿根酸怎么办 出了月子腰酸痛怎么办 出了月子腿没劲怎么办 生完孩子后缺钙怎么办 生完孩子腿疼怎么办 生完孩子后腿疼怎么办 生完孩子肛门突出怎么办 生完孩子肋骨突出怎么办 蛙跳理蛙跳后腿疼怎么办 蛙跳两天后腿还疼怎么办 莲花菩提盘黑了怎么办 体育课蛙跳后肌肉拉伤怎么办 o型腿骨头弯了怎么办 小孩钢琴坐姿不对向后仰怎么办 小孩皮肤不好容易留疤怎么办 学游泳时站不稳怎么办 水呛到了不停打嗝怎么办 来月经前游泳了怎么办 快来完事游泳了怎么办 游泳时来月经了怎么办 经期第7天游泳了怎么办 来月经已经游了泳怎么办 月经来了要游泳怎么办 三个月宝宝趴着不会抬头怎么办 我的月经不完怎么办 游泳时怎么办能浮出水面 游泳时眼镜起雾怎么办 练瑜伽手臂变粗怎么办 孕妇喝了芬达怎么办 宫口开了但头高怎么办 整天坐着肚子越来越大怎么办 坐久了屁股变大怎么办 屁股久坐的黑印怎么办 练瑜伽小腿变粗怎么办 练瑜伽腿粗了怎么办 练完瑜伽腿粗怎么办 肚子大屁股大腿粗怎么办 甲状腺偏大弥漫性欠均匀怎么办 大腿后侧拉伤了怎么办 腰和臀部都疼怎么办 瑜伽后弯后腰疼怎么办?