《二分答案》算法练习

目录

一、木材加工

二、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;
 } 
相关推荐
kaixin_learn_qt_ing11 小时前
C++多态实现原理
c++
可乐ea11 小时前
Agent 模型分级升级路由:用置信度阈值把贵模型省下来
人工智能·算法·机器学习·结构化输出·置信度路由·模型升级路由·大模型成本优化
无名猿11 小时前
unique_ptr 完全指南:独占所有权与零开销
c++·性能优化·内存管理·标准库·现代c++
笑鸿的学习笔记11 小时前
C++笔记之大块顺序写
java·c++·笔记
Navigator_Z11 小时前
LeetCode //C - 1278. Palindrome Partitioning III
c语言·算法·leetcode
Godspeed Zhao11 小时前
现代智能雷达技术18——算法(4)
算法
lvwangshu12 小时前
登录日志 题解
数据结构·线段树·题解·技巧·性质题·思维好题·细节题
CHEEVEN_QY12 小时前
液冷板热阻计算与流阻优化的实战方法
人工智能·算法·机器学习
CQU_JIAKE12 小时前
10.2【A】
数据结构
无名猿12 小时前
对象构造与析构顺序全解:声明顺序、继承链与逆序析构
c++·内存管理·调试技巧·现代c++