*这种题好像不用写题解...

题意:

  一个人要改动别人的实验记录,实验记录记录是一个集合

   实验记录本身满足:$max(X)-min(X)<=2$

   改动结果要求:

    1.新的集合平均值和之前的一样

    2.新的集合,$max(Y)<=max(X),min(Y)>=min(X)$

   求新一个和之前相同数值最少的新记录

题解:

  首先考虑不同情况,

  如果$max-min<=1$ :因为要保证平均值且值域受限制不变,无法改变值(增加一个值之后,要相应的把另外一值减小,而数值只有2/1种,改动没有意义)

  如果$max-min=2$ 我们把所有值分为 $max,mid,min$ 三类那么就有了2种选择:

  1.把所有的$mid$两两分组 变成$max,min$

  2.把所有的$max,min$两两组合,变成$mid$

  我们比较一下谁比较就行了...

1A

#include <bits/stdc++.h>
#define ll long long
#define rep(ii,a,b) for(int ii=a;ii<=b;ii++)
using namespace std;
const int maxn=1e5+10;
int casn,n,m,k;
int num[maxn];
int cnt[3];
int main(){
rep(i,1,n) cin>>num[i];
sort(num+1,num+1+n);
rep(i,1,n)cnt[num[i]-num[1]]++;
ll ans1=cnt[2]+cnt[0]+cnt[1]%2;
ll ans2=max(cnt[2],cnt[0])-min(cnt[2],cnt[0])+cnt[1];
ll ans=min(ans1,ans2);
if(num[n]-num[1]<=1) ans=n;
else if(ans1<ans2){
cnt[0]+=cnt[1]/2;
cnt[2]+=cnt[1]/2;
cnt[1]%=2;
}else {
cnt[1]+=2*min(cnt[0],cnt[2]);
if(cnt[2]>cnt[0]) {
cnt[2]-=cnt[0];
cnt[0]=0;
}else{
cnt[0]-=cnt[2];
cnt[2]=0;
}
}
cout<<ans<<endl;
while(cnt[0]--) cout<<num[1]<<' ';
while(cnt[1]--) cout<<num[1]+1<<' ';
while(cnt[2]--) cout<<num[1]+2<<' ';
return 0;
}

CodeForces 931C Laboratory Work 水题,构造的更多相关文章

  1. Codeforces Gym 100531G Grave 水题

    Problem G. Grave 题目连接: http://codeforces.com/gym/100531/attachments Description Gerard develops a Ha ...

  2. codeforces 706A A. Beru-taxi(水题)

    题目链接: A. Beru-taxi 题意: 问那个taxi到他的时间最短,水题; AC代码: #include <iostream> #include <cstdio> #i ...

  3. codeforces 569B B. Inventory(水题)

    题目链接: B. Inventory time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  4. Codeforces 489A SwapSort (水题)

    A. SwapSort time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  5. codeforces 688A A. Opponents(水题)

    题目链接: A. Opponents time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  6. CodeForces 534B Covered Path (水题)

    题意:给定两个速度,一个一初速度,一个末速度,然后给定 t 秒时间,还每秒速度最多变化多少,让你求最长距离. 析:其实这个题很水的,看一遍就知道怎么做了,很明显就是先从末速度开始算起,然后倒着推. 代 ...

  7. Codeforces Gym 100286I iSharp 水题

    Problem I. iSharpTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  8. CodeForces 705A(训练水题)

    题目链接:http://codeforces.com/problemset/problem/705/A 从第三个输出中可看出规律, I hate that I love that I hate it ...

  9. CodeForces Gym 100685C Cinderella (水题)

    题意:给定 n 个杯子,里面有不同体积的水,然后问你要把所有的杯子的水的体积都一样,至少要倒少多少个杯子. 析:既然最后都一样,那么先求平均数然后再数一下,哪个杯子的开始的体积就大于平均数,这是一定要 ...

随机推荐

  1. Hadoop记录-Hadoop NameNode 高可用 (High Availability) 实现解析

    Hadoop NameNode 高可用 (High Availability) 实现解析   NameNode 高可用整体架构概述 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDF ...

  2. vue-cli脚手架笔记

    vue不支持IE8,因为vue使用了IE8无法模拟的 ECMAScript 5特性 使用vue-cli脚手架会让我们的工作非常方便 比如想编译一下es6的语法就使用 babel loader 和 ba ...

  3. Consul 域名服务

    =============================Web请求的全过程(包含DNS) =============================完整过程参考 https://blog.csdn. ...

  4. 谷歌地图,国内使用Google Maps JavaScript API,国外业务

    目前还是得墙 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...

  5. json日期字符串格式化时间

    var str = '/Date(1333245600000+0800)/';   function data_string(str) {     var d = eval('new ' + str. ...

  6. Javaweb学习笔记——(二十一)——————过滤器

    过滤器     过滤器概述         1.什么是过滤器:             过滤器javaweb三大组件之一,它与Serlvet很相似,不过它过滤器是用来拦截请求的,而不是处理       ...

  7. mini2440开发板jilnk使用

    1.安装Setup_JLinkARM_V402d.exe软件 安装完成打开SEGGR J-FLASH ARM,界面如下: 2.用jlink将开发板与pc连接,打开开发板电源,将开关s2拨到nor fl ...

  8. idea 2018.1破解激活方法,有效期至2099年

    优点:有效期至2099年,不出意外,这辈子肯定够用了 缺点:稍微麻烦些,不过不要紧,为了以后省事,都值了 下面是具体的破解激活步骤: 1. 下载破解补丁文件,路径为:http://idea.lanyu ...

  9. MVC |分部视图 PartialView()

    介绍如何定义 其实它和普通视图没有多大区别,只是创建分部视图的时候视图里没有任何内容,你需要什么标签你自己加.第二就是分部视图不会执行_ViewStart.cshtml中的内容) 控制器 Partia ...

  10. springboot 02-PropertiesFile 自定义配置属性,多环境配置

    application.properties: # 自定义配置 test.hello.world = HelloWorld test.person.name = 哈哈 test.person.sex ...