Add, Divide and Floor(cf round 158 div2)

题目: 给你一个整数数组 a1,a2,...,an 。在一次操作中,你可以选择一个整数 x ,并用 (a[i]+x)/2 替换 ai ( (a[i]+x)/2表示将 y(a[i]+x)/2舍入为最接近的整数(下取整)。 ⌊y⌋ 表示将 y 舍入为最接近的整数)来替换从 1 到 n 的所有 i。请注意,每次操作都会影响数组中的所有元素。打印使数组中所有元素相等所需的最小操作数。如果操作次数小于或等于 n,则打印每次操作所选择的 x 。如果有多个答案,则打印任意一个。

输入样例

4

1

10

2

4 6

6

2 1 2 1 2 1

2

0 32

输出样例

复制代码
0
2
2 5
1
1
6 

思路:

将a1~an 进行排序

a1<=a2<=a3<=...<=an

若 b<=c 则 (b+x)/2<=(c+x>)/2;

类似与夹逼定理的思路 只需要让 a1(最小值)与an(最大值)相等 其余的值都就相等了

即a1=a2=a3=...=an

然后再去思考如何取值让最大值和最小值相等操作最小

x取1 3 5 7 ...2n+1 进行操作 会让最大值和最小值的差值都一样

x取0 2 4 6 .......2n 进行操作 会让最大值和最小值的差值都一样

那不妨就只取1、0(x的大小不会改变答案,x的奇偶性可以改变答案)

思考什么样的条件下 x取1 什么样的条件下x取0

当最小值为奇数时

若x取1 这样让(最小值+x)/2 可以+1 (最大值+1)/2可能+1 也可能+0

若x取0 (最小值+x)/2 +0 (最大值+1)/2可能+1 也可能+0

故取1

当最小值为偶数时

若x取1 (最小值+x)/2 +0 (最大值+1)/2可能+1 也可能+0

若x取0 (最小值+x)/2 +0 (最大值+1)/2 +0

故取0

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=2e5+10;
vector<ll>v;
map<ll,ll>mp;
ll a[N];
int main()
{
	int t;cin>>t;
	while(t--)
	{
		int n;cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		sort(a+1,a+1+n);
		ll min1=a[1],max1=a[n];
		v.clear();
		if(n==1) cout<<"0"<<endl;
		else
		{
	
		while(min1!=max1)
		{
			if(min1!=0)
			{
			if(min1%2!=0)
			{
				v.push_back(1);
				min1=(min1+1)/2;
				max1=(max1+1)/2;
			}
			else
			{
				v.push_back(0);
				min1/=2;
				max1/=2;
			}
		   }
		   else
		   {
		   	v.push_back(0);
		   	max1/=2;
		   }
		}
		cout<<v.size()<<endl;
		if(v.size()<=n)
		{
			for(int i=0;i<v.size();i++)
			{
				cout<<v[i]<<" ";
			}
			cout<<endl;
		}
	}
	}
	return 0;
}
相关推荐
田梓燊1 小时前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎2 小时前
算法札记——4.27
算法
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
数据牧羊人的成长笔记2 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理3 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
Mrlxl.cn5 小时前
计算机网络——网络层
c语言·数据结构·计算机网络·考研
d111111111d6 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜6 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Jiangxl~7 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢7 小时前
wolfram详解山峦算法
前端·算法