《算法每日一题(1)--- 第31场蓝桥算法挑战赛》

《算法每日一题(1)--- 第31场蓝桥算法挑战赛》


🔥小龙报:个人主页

🎬作者简介:C++研发,嵌入式,机器人方向学习者

❄️个人专栏:《C语言》《算法》KelpBar海带Linux智慧屏项目

永远相信美好的事情即将发生

文章目录


前言

本系列为笔者的练习分享,题目难度适中适合刚入门(笔者也是刚入门)算法的同学学习,希望能和大家见证算法编程和逻辑思维的进步
注:算法赛我们只讲解前三题涉及基础算法的后三题涉及高阶数据结构和算法我们以后在探究


赛事链接: 赛事链接

一、零食接龙

1.1题目

1.2算法原理

这道题的逻辑很简单,我们直接上代码

二、 成员划分

2.1题目

2.2算法原理

(1)首先此题的题是眼按顺序划分成若干个连续的小组(即子区间),并且要满足区间内奇偶数数量相等 ,那我们便可以使用前缀和数组ans,遇到奇数:+1 ,遇到偶数:-1 ,则一个合法区间仅为满⾜条件当且仅当ans = 0

(2)划分最多的子区间:我们可以使用贪心,从 i=1 到 n 遍历当奇偶数量一致时就划分为一个子区间说明从上⼀个切割点到当前 i 形成了⼀个最短的平衡⼦数组。

2.3代码

c 复制代码
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];

int main()
{
	int n;
	cin >> n;

	int ans = 0;
	int ret = 0;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];

		if (a[i] % 2 != 0)
			ans += 1;
		else
			ans -= 1;

		if (ans == 0) //划分一组的条件
			ret++;
	}

	if (ans != 0)
		cout << -1 << endl;
	else
		cout << ret << endl;
	return 0;
}

三、 程序辩论

3.1题目

3.2算法原理

首先:这道题要求获胜的小蓝最小的正整数初始程序设计能力值 ,最佳策略:优先与能力值最小的对手辩论故要排序

(1)我想到的第一个方法是二分答案 ,设题目要求的答案为ret

如图:

(2)这道题的第二个方法就是模拟:获胜的条件便是大于等于当前值加上当前值的一半大于等于当前值的下一个值既 x + a[i] / 2 >= a[i+1] 通过移项想让x最小,a[i + 1] - (a[i] / 2)要最大;

3.3代码

c 复制代码
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;

const int N = 1e5 + 10;
LL a[N];

int main()
{
	int n;
	cin >> n;

	for (int i = 1; i <= n; i++)
		cin >> a[i];
	sort(a + 1, a + 1 + n);
	LL ret = 0;
	LL x = 0;
	for (int i = 1; i <= n; i++)
	{
		ret = max(ret,a[i] - x);
		x += a[i] / 2;
	}

	cout << ret << endl;
	return 0;
}

3.3.1使用二分答案

c 复制代码
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL n, a[N];

bool check(LL x)
{
	for (int i = 1; i <= n; i++)
	{
		if (x < a[i])
			return false;
		x += a[i] / 2;
	}
	return true;
}
int main()
{
	cin >> n;

	for (int i = 1; i <= n; i++)
		cin >> a[i];

	sort(a + 1, a + 1 + n);  //排序

	LL l = 1, r = 1e9;
	while (l < r)
	{
		LL mid = (l + r) / 2;

		if (check(mid))
			r = mid;
		else
			l = mid + 1;
	}

	cout << l << endl;
	return 0;
}

3.3.2模拟

总结

今天就到这里,大家明天见

相关推荐
技术净胜12 小时前
MATLAB二维绘图教程:plot()函数全解析(线条样式/颜色/标记/坐标轴设置)
开发语言·matlab
CoderYanger12 小时前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:12.全排列
java·算法·leetcode·机器学习·深度优先·剪枝·1024程序员节
Slow菜鸟12 小时前
Java开发规范(八)| 安全规范—企业级应用的“架构级底线”
java·开发语言·安全
憨憨崽&12 小时前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划
毕设源码-邱学长12 小时前
【开题答辩全过程】以 基于Java的公职备考在线学习系统的设计与实现为例,包含答辩的问题和答案
java·开发语言·学习
水天需01013 小时前
C++ 三种指针转换深度解析
c++
二川bro13 小时前
模型部署实战:Python结合ONNX与TensorRT
开发语言·python
联系QQ:2769988513 小时前
电化学与冷启动仿真的赝电容计算及GITT扩散系数研究——阻抗分析拟合与全电池电容器性能评估
开发语言
chem411113 小时前
C 语言 函数指针和函数指针数组
c语言·数据结构·算法
我是李武涯13 小时前
如何修改git的commit消息
git