《二分答案》算法练习

目录

一、木材加工

二、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;
 } 
相关推荐
I_belong_to_jesus6 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Rabitebla7 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
码客-ygluu13 小时前
一个通用游戏数据服务器
c++·架构
another heaven13 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude13 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司13 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP16 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
xiaoye-duck16 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
思麟呀16 小时前
背包DP(01背包+完全背包)
c++·算法