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

题意:

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

   实验记录本身满足:$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. layui打印html页面转成pdf

    <!DOCTYPE html><html lang="zh"><head>     <meta charset="UTF-8&q ...

  2. 【1】【leetcode-93】复原IP地址

    (不会,典型) 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135 ...

  3. java代码实现ftp服务器的文件上传和下载

    java代码实现文件上传到ftp服务器: 1:ftp服务器安装: 2:ftp服务器的配置: 启动成功: 2:客户端:代码实现文件的上传与下载: 1:依赖jar包: 2:sftpTools   工具类: ...

  4. Mac 键盘符号 及VSCode快捷键 说明

    Mac 键盘符号说明 ⌘ == Command ⇧ == Shift ⇪ == Caps Lock ⌥ == Option ⌃ == Control ↩ == Return/Enter ⌫ == De ...

  5. jQuery two way bindings(双向数据绑定插件)

    jQuery two way bindings https://github.com/petersirka/jquery.bindings 这是一个简单的jQuery双向绑定库. 此插件将HTML元素 ...

  6. mysql比较运算符和函数

    mysql> SELECT 15 BETWEEN 1 AND 22;+---------------------+| 15 BETWEEN 1 AND 22 |+---------------- ...

  7. Linux之Ubuntu添加/移除个人软件包存档的源[PPA,Personal Package Archives]

    现在很多第三方软件还需要添加PPA软件源到Ubuntu系统当中,但是添加了PPA之后,软件可以直接在软件中心进行安装并会自动提示升级,这就是Ubuntu带来的方便,现在我们就来看看如何添加PPA软件源 ...

  8. Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)

    声明:所有内容来自coursera,作为个人学习笔记记录在这里. 请不要ctrl+c/ctrl+v作业. Optimization Methods Until now, you've always u ...

  9. EcustOJ P109跳一跳(离散化+dp)

    题目链接 感觉这道题我看了很多天,胡思乱想啊,一开始觉得记忆化搜索会可能T啊,,可能出题人的数据卡的好就稳T了的感觉..后来想了想,好像离散化一下,记一下位置之后再记忆化搜索就应该稳了吧..(好像直接 ...

  10. javascript删除cookie

    代码很简单 function deleteCookie (cookieName) { document.cookie = `${cookieName}=; expires=${new Date(0). ...