《二分答案》算法练习

目录

一、木材加工

二、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;
 } 
相关推荐
BK贝壳2 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
会编程的小孩2 小时前
C++ qt的安装
c++
企业数字化笔记4 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!5 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小成202303202658 小时前
C++~07补充
开发语言·c++
小郎君6588 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧8 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm8 小时前
40 二叉树的直径
c++·leetcode
Shimeri8 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
解决小子8 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统