《二分答案》算法练习

目录

一、木材加工

二、EKO/砍树

三、跳石头


一、木材加工

P2440 木材加工 - 洛谷

答案如下:

cpp 复制代码
#include<iostream>
using namespace std;

typedef long long LL;

const int N = 1e5+10;
int a[N];
int n,k;

int cal(int x)
{
	int sum = 0;
	for(int i = 1; i <= n; i++)
	{
		sum += a[i]/x;
	}
	return sum;
}

int main()
{
	cin >> n >> k;
	int left = 0, right = 1e8;
	for(int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	while(left < right)
	{
		int mid = (left+right+1)/2;
		if(cal(mid) >= k)
		{
			left = mid;
		}
		else{
			right = mid-1;
		}
	}
	cout << left << endl;
	return 0;
 } 

二、EKO/砍树

P1873 COCI 2011/2012 #5 EKO / 砍树 - 洛谷

答案如下:

cpp 复制代码
#include<iostream>
using namespace std;

typedef long long LL;

const int N = 1e6+10;
LL a[N];
int n,m;

LL cal(LL x)
{
	LL ret = 0;
	for(int i = 1; i <= n; ++i)
	{
		if(x < a[i])
		{
			ret += a[i] - x;
		}
	}
	return ret;
}

int main()
{
	cin >> n >> m;
	LL max = 0;
	for(int i = 1; i <= n; ++i)
	{
		cin >> a[i];
		if(a[i] > max)
		{
			max = a[i];
		}
	}
	LL left = 0, right = max;
	while(left < right)
	{
		LL mid = (left + right + 1)/2;
		if(cal(mid) >= m)
		{
			left = mid;
		}
		else{
			right = mid - 1;
		}
	}
	cout << left << endl;
	return 0;
}

三、跳石头

P2678 NOIP 2015 提高组 跳石头 - 洛谷

答案如下:

cpp 复制代码
#include<iostream>
using namespace std;

const int N = 5e4 + 10;
int a[N];

int l,n,m;

int calc(int x)
{
	int ret = 0;
	for(int dst = 0, src = dst + 1; dst <= n; dst++)
	{
		while(src <= n && a[src] - a[dst] < x)
		{
			src++;
		}
		ret += src - dst - 1;
		dst = src - 1;
	 } 
	return ret; 
}

int main()
{
	cin >> l >> n >> m;
	for(int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	a[n+1] = l;
	n++; 
	int left = 0, right = l;
	while(left < right)
	{
		int mid = left + (right - left + 1)/2;
		if(calc(mid) > m)
		{
			right = mid - 1;
		}
		else{
			left = mid;
		}
	}
	cout << left << endl;
	return 0;
 } 
相关推荐
小O的算法实验室4 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
小飞学编程...4 小时前
【哈希表】
数据结构·哈希算法·散列表
码匠许师傅4 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
Tbisnic5 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx5 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归6 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing7 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习7 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨8 小时前
基础数论总结
笔记·学习·算法
动词ing8 小时前
【C语言】结构体+文件基础
c语言·开发语言·数据结构