Numbers(CodeForces-128D)【思维/list】
2024-08-23 12:39:55
题目链接:https://vjudge.net/problem/CodeForces-128D
题意:给出一组数,要求将这些数排列成一个环,满足每相邻两个数的差值为1,问能否完成。
思路:先取出最小的数min,作为环中一点,则如果能够完成排列,该数两侧的数字即为min+1,如果min有多个,则放在min+1旁边,重复这样的过程,使用list可以很容易地完成。
代码如下:
#include<cstdio>
#include<list>
#include<iostream>
#include<cmath>
#include<unordered_map>
using namespace std;
int n,arr[],book[];
unordered_map<int,int> mp;
int main(){
scanf("%d",&n);
int ha=,minVal=;
for(int i=;i<=n;i++){
scanf("%d",&arr[i]);
minVal=min(minVal,arr[i]);
if(mp[arr[i]]==)
mp[arr[i]]=++ha;
book[mp[arr[i]]]++;
}
int ans=;
list<int> lt;
lt.push_front(minVal);
book[mp[minVal]]--;
int tmpFro=minVal,tmpBac=minVal,nn=n-;
while(){
if(book[mp[tmpFro+]]){
book[mp[tmpFro+]]--;
lt.push_front(tmpFro+);
nn--;
if(book[mp[tmpFro]]){
book[mp[tmpFro]]--;
lt.push_front(tmpFro);
nn--;
}
else tmpFro++;
}
if(book[mp[tmpBac+]]){
book[mp[tmpBac+]]--;
lt.push_back(tmpBac+);
nn--;
if(book[mp[tmpBac]]){
book[mp[tmpBac]]--;
lt.push_back(tmpBac);
nn--;
}
else tmpBac++;
}
else break;
}
if(nn==&&abs(*lt.begin()-*lt.rbegin())==){
printf("YES");
}
else printf("NO");
return ;
}
By xxmlala
最新文章
- Java并发编程:Lock
- http响应需要记住的状态码
- 浅谈sizeof
- js获取IP和MAC地址
- C语言中qsort函数用法
- Hibernate各种主键生成策略与配置详解
- tesseract api C++使用例子
- 4.“写程序” 这个活动大多数情况下是个人行为。 我们听说的优秀程序员似乎都是单打独斗地完成任务。同学们在大学里也认识一些参加ACM 比赛的编程牛人, 他们写的ACM 比赛的程序是软件么? “写程序” 和 ”做软件“ 有区别么? 请采访这些学生。
- webpy使用笔记(二) session/sessionid的使用
- 幻灯片插件FlexSlider -- Amaze UI幻灯片参数
- Linux系统时间设置(转载)
- JS语句循环(100以备奇偶数、100以内与7先关的数、100以内整数的和、10以内阶乘、乘法口诀、篮球弹起高度、64格子放东西)
- socket.io 使用
- 自动Telnet远程登陆命令
- js深入研究之无法理解的js类代码,extend扩展
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)
- FTP下载帮助类
- CentOS 6.8重新安装yum
- 日志log4j配置详情,日志log具体到你想不到
- canvas绘制多边形
热门文章
- ListCtrl 技巧集
- 2019.6.28 校内测试 T2 【音乐会】二重变革
- Ubuntu 14.04 网卡网关配置修改
- AE开发之shp转txt
- HDU 1087 Super Jumping! Jumping! Jumping! ——(LIS变形)
- Jenkins系统初始化配置
- 微信小程序开发常见坑
- Mac下持续集成-与JMeter与Ant执行后自动发送邮件的整合(性能报告)==
- shell中的for循环用法详解
- Facebook币Libra学习-4.新的智能合约语言Move入门