C. Water the Trees(二分)

文章描述了一道编程竞赛题目,涉及到在公园里有树木需要通过浇水使其达到相同高度的问题。每天可以给一棵树浇水,奇数天增长1,偶数天增长2。任务是找出最小的天数以使所有树高度一致。解决方案是使用二分查找法来检查不同的天数是否可行。
摘要由CSDN通过智能技术生成

Problem - C - Codeforces

 公园里有n棵树,编号从1到n,第i棵树的初始高度为hi。你要给这些树浇水,让它们都长到同样的高度。浇水过程如下。你从第一天开始给树浇水。在第j天你可以:选择一棵树,给它浇水。如果日期是奇数(例如1,3,5,7,…),那么树的高度增加1。如果一天是偶数(例如:2, 4, 6, 8,…),那么树的高度增加2。或者一天不给树浇水。注意,你一天只能给一棵树浇水。你的任务是确定浇水所需的最少天数,这样它们才能长到相同的高度。你必须回答t个独立的测试用例。输入输入的第一行包含一个整数t (1 < t <2-104)——测试用例的数量。测试用例的第一行包含一个整数n (1 < n < 3- 105)——树的数量。测试用例的第二行包含n个整数h1, h2,…, hn (1 < hi < 10°),其中h为第i棵树的高度。它保证所有测试用例的n的和不超过3 - 105 (Sn < 3.105)。输出对于每个测试用例,打印一个整数——浇水所需的最少天数,以使它们长到相同的高度。

Example

input

Copy

3
3
1 2 4
5
4 4 3 5 5
7
2 5 4 8 3 7 4

output

Copy

4
3
16

请注意考虑这个例子的第一个测试用例。树的初始状态为[1,2,4]。1. 在第一天,让我们给第一棵树浇水,这样高度序列就变成[2,2,4];2. 在第二天,让我们给第二棵树浇水,这样高度序列就变成[2,4,4];3.让我们跳过第三天;4. 第四天,我们给第一棵树浇水,这样高度的序列就变成了[4,4,4]。因此,答案是4。

题解:
题意很容易理解,一般这种题就是二分天数,check即可

但是可能会出现一种情况类似这样,

遇到1 1 1 1 1 1 2这种情况我们最少的天数是把2先变成3然后再把所有都变成3,所以我们判断天数能不能把所有数组都变成最大数或者都变成最大数+1,如果能天数就符合。

所以判断时候mx + 1,mx都要判断

并且判断时优先用偶数天数

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<set>
using namespace std;
#define int long long
const int N = 4e5 + 10;
typedef pair<int, int> PII;
int h[N],n;
int check(int one,int two,int x)
{
	for(int i = 1;i <= n;i++)
	{
		if(h[i] < x)
		{
			int w = x - h[i];
			if(w/2 <= two)
			{
				two -= w/2;
				one -= w%2;
			}
			else
			{
				w -= two*2;
				two = 0;
				one -= w;
			}
		}
	}
	if(one <0 )
	return 0;
	else
	return 1;
}
void solve() 
{
	cin >> n;
	int l = 0,r = 1e18;
	int mx = 0;
	for(int i = 1;i <= n;i++)
	{
		cin >> h[i];
		mx = max(mx,h[i]);
	}
	while(l <= r)
	{
		int mid = (l + r)/2;
		if(check(mid - mid/2,mid/2,mx)||check(mid - mid/2,mid/2,mx + 1))
		{
			r = mid - 1;
		}
		else
		{
			l = mid + 1;
		}
	}
	cout <<l <<"\n";
}


signed main() 
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
//scanf("%lld",&t);
	while (t--) 
	{
		solve();
	}
}
//1 1 1 0 1

//1 1 1 0 1
//1 1 1 0 1
//1 1 1 0 1
//0 1 1 1 1
//0 1 1 1 1

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值