博客
关于我
Codeforces Round #611 (Div. 3) E. New Year Parties (贪心)
阅读量:389 次
发布时间:2019-03-05

本文共 934 字,大约阅读时间需要 3 分钟。

在这里插入图片描述
在这里插入图片描述
题意:给定一个初始序列,规定可以对序列的每个元素进行+1、-1或者不变的操作,一顿操作过后,序列不同元素的个数为X,求x的最大和最小值
思路:求最小值容易想,可以先排序再去重,只要有一段元素比如1,2,3是连续且相差为1的肯定可以合并在一起,但是这里有个漏洞,就是比如2 4其实也是可以合并在一起的,把这个条件加上就行。
至于求最大值的话,可以先统计每个数的个数,然后枚举每个数,只要左边有空位就往左边移,如果自己还有多的就往右边移。

#include
using namespace std;const int maxn=2e5+10;typedef long long ll;int n,a[maxn],b[maxn],maxx=0,num[maxn]={ 0},ans;int main(){ scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]),b[i]=a[i],maxx=max(maxx,a[i]),num[b[i]]++; sort(a+1,a+1+n); sort(b+1,b+1+n); int size=unique(a+1,a+1+n)-a-1; int j=1; a[size+1]=1e6,a[size+2]=1e9; while(j<=size) { if(a[j+2]-a[j+1]==1&&a[j+1]-a[j]==1) j+=3; else if(a[j+1]-a[j]==1) j+=2; else if(a[j+1]-a[j]==2) j+=2; else j++; ans++; } printf("%d ",ans); ans=0; for(int i=1;i<=n+1;++i) { if(num[i]==0) continue; if(num[i-1]==0) num[i]--,num[i-1]++; if(num[i]>1) num[i]--,num[i+1]++; } for(int i=0;i<=maxx+1;++i) if(num[i]) ans++; printf("%d\n",ans);}

转载地址:http://yoewz.baihongyu.com/

你可能感兴趣的文章
nghttp3使用指南
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(一)—— 组件介绍
查看>>
nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + Tomcat + SpringBoot 部署项目
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
查看>>
Nginx - 反向代理与负载均衡
查看>>
nginx 1.24.0 安装nginx最新稳定版
查看>>
nginx 301 永久重定向
查看>>
nginx connect 模块安装以及配置
查看>>
nginx css,js合并插件,淘宝nginx合并js,css插件
查看>>
Nginx gateway集群和动态网关
查看>>
Nginx keepalived一主一从高可用,手把手带你一步一步配置!
查看>>
Nginx Location配置总结
查看>>
Nginx log文件写入失败?log文件权限设置问题
查看>>