二分例题(D.负重越野,I.路径规划)

2024-05-27 22:52

本文主要是介绍二分例题(D.负重越野,I.路径规划),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两天的训练赛都有一道二分的题,但是都没往二分上面想,同样不知道怎么二分。

D. Fast and Fat

思路

二分的关键也就是check函数怎么写了,求队伍最大速度,可以分为速度>=mid和<mid两部分,再判断,能不能实现速度大的背小的,并且速度>=mid.

代码

#include<bits/stdc++.h>
using namespace std;
# define int long long
int n;
struct pi{int v,w;
}a[100005];
bool cmp1(pi a,pi b)
{return a.v+a.w>b.v+b.w;
}
bool cmp2(pi a,pi b)
{return a.w>b.w;
}
int check(int x)
{vector<pi> s;//存放速度小的,需要被背着vector<pi> q;//存速度大的,for(int i=1;i<=n;i++){if(a[i].v>=x)q.push_back(a[i]);else s.push_back(a[i]);}if(q.size()<s.size())return 0;sort(q.begin(),q.end(),cmp1);//速度可能会变为vi+wi-wj,所以按vi+wi的大小顺序排sort(s.begin(),s.end(),cmp2);//w从大到小排。//无需考虑太多,如果最大的vi+wi去背wj,速度达不到,那也不用考虑其他的了,必须要保证每个小的都被背for(int i=0;i<s.size();i++){if(q[i].v+q[i].w-s[i].w<x)return 0;}return 1;
}
void solve()
{cin>>n;for(int i=1;i<=n;i++)cin>>a[i].v>>a[i].w;int l=-1,r=1e9+10;while(l<r)//这是小于等于最大值的二分{int mid=(l+r+1)>>1;if(check(mid))l=mid;else   r=mid-1;	}cout<<l<<'\n';
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie();int t;cin>>t;while(t--){solve();}
}

I. Path Planning

思路

用一个map,键存位置,值存数字,关于check函数,我一直想的都是i,j,i+j…但这些其实可以不考虑,要满足向右下走,用两重循环,i的值在不断增大,此时已经是向下,这时只需要,设个变量判断j,就可以了

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
map<pair<int,int>,int> ma;
int n,m;
int check(int x)//这样判断很巧妙,而且首尾数字是什么,都无关紧要
{int k=0;for(int i=1;i<= n;i++)for(int j=1;j<= m;j++)//如果是一行或一列,不需要特殊考虑,因为j逐步增大{if(ma[{i,j}]<x){if(j<k) return 0;k=j;}}return 1;
}
void solve()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>ma[{i,j}];//这里将map和pair结合,赛时也没想到int l=0,r=n*m;while(l<r){int mid=l+r+1>>1;if(check(mid))l=mid;else 	r=mid-1;	}cout<<l<<'\n';
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t;cin>>t;while(t--){solve();}
}

这篇关于二分例题(D.负重越野,I.路径规划)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008827

相关文章

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

SQL Server中,用Restore DataBase把数据库还原到指定的路径

restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' Go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'Ease

IPD推行成功的核心要素(十一)技术规划与平台规划促进公司战略成功

随着外部大环境的影响,各企业仅有良好的愿望是不够的。预测并顺应新兴市场和技术的变化,变危机为转机,不断推出强大的产品才是一个公司持续繁荣的根本保障。而高效的产品开发往往是基于某些关键技术,针对市场推出的一个或几个产品系列,这些产品系列通常共用一些产品平台,共用一种或者几种关键技术。当一家企业进入了平稳发展期,已经建立了较为完善的管理制度和产品开发流程,但是依然认为竞争对手是那样强大,那样不可战胜。

C# 命名管道中客户端访问服务器时,出现“对路径的访问被拒绝”

先还原一下我出现错误的情景:我用C#控制台写了一个命名管道服务器,然后用ASP.NET写了一个客户端访问服务器,运行之后出现了下面的错误: 原因:服务器端的访问权限不够,所以是服务器端的问题,需要增加访问权限。(网上很多都说是文件夹的权限不够,情况不同,不适用于我这种情况) 解决办法: (1)在服务器端相应地方添加以下代码。 PipeSecurity pse = new PipeSec

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering

自动驾驶规划中使用 OSQP 进行二次规划 代码原理详细解读

目录 1 问题描述 什么是稀疏矩阵 CSC 形式 QP Path Planning 问题 1. Cost function 1.1 The first term: 1.2 The second term: 1.3 The thrid term: 1.4 The forth term: 对 Qx''' 矩阵公式的验证 整体 Q 矩阵(就是 P 矩阵,二次项的权重矩阵)