扫地机器人

题目

题目描述
小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示。

走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中。

已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干净

请你编写一个程序,计算每台机器人的清扫路线,使得

它们最终都返回出发方格,

每个方格区域都至少被清扫一遍,

从机器人开始行动到最后一台机器人归位花费的时间最少。

注意多台机器人可以同时清扫同一方块区域,它们不会互相影响

输出最少花费的时间。

在上图所示的例子中,最少花费时间是 6。第一台路线:2-1-2-3-4-3-2,清 扫了 1、2、3、4 号区域。第二台路线 5-6-7-6-5,清扫了 5、6、7。第三台路线 10-9-8-9-10,清扫了 8、9 和 10。

输入
10 3
5
2
10

输出
6

思路

这题是用贪心算法做的,要使时间最快,那么对于一片区域的左边要让其最靠近它的机器打扫才能使时间最快,也就是说每一台机器要打扫自己左边的区域,但是只这样不能使时间最快,因为每一台机器打扫的时间可能不同(即其中一台机器没有打扫完了可是时间没有结束),因此剩余的时间要打扫右边的区域,于是我们就可以从大到小遍历时间。

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,k;
int a[N];
bool check(int mid){
	int pos = 0;
	for(int i = 0;i < k;i++){//遍历机器
		int t = mid;
		if(pos < a[i]) t -= (a[i]-pos-1)*2;//打扫左边的区域,然后回去
		if(t<0) return false;//左边的区域没有打扫完
		pos = a[i]+t/2;//还有时间就打扫右边的区域
	}
	if(pos<n) return false;
	return true;
}
int main()
{
	cin>>n>>k;
	for(int i = 0;i < k;i++){
		cin>>a[i];
	}
	sort(a,a+k);//从大到小排序
	int l = 0,r = n*2;
	int ans = n*2;//表示最优的时间,初始值是表示最大的情况(即一个机器从头到回去)
	while(l<=r){//二分优化
		int mid = l+r>>1;
		if(check(mid)){
			ans = mid;
			r = mid -1;
		}
		else
		    l = mid + 1;
	}
	cout<<ans<<endl;
	return 0;
}

总结

  • 对于贪心算法即我们要思考最优的答案,要一步步发现规律解决问题

相关推荐

  1. 扫地机器人

    2024-03-30 14:08:01       21 阅读
  2. 扫地机器人与项目管理

    2024-03-30 14:08:01       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 14:08:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 14:08:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 14:08:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 14:08:01       20 阅读

热门阅读

  1. Elasticsearch rollover API

    2024-03-30 14:08:01       23 阅读
  2. docker centos7离线安装ElasticSearch单机版

    2024-03-30 14:08:01       17 阅读
  3. R语言数据分析基础(一)

    2024-03-30 14:08:01       24 阅读
  4. 【React】React表单组件

    2024-03-30 14:08:01       20 阅读
  5. 【C语言】程序翻译过程

    2024-03-30 14:08:01       22 阅读
  6. sqlmap基础知识

    2024-03-30 14:08:01       17 阅读
  7. Go的数据结构与实现【LinkedList】

    2024-03-30 14:08:01       19 阅读
  8. 手写DNS服务器测速程序(工具分享)

    2024-03-30 14:08:01       22 阅读
  9. test6

    test6

    2024-03-30 14:08:01      22 阅读
  10. 成都某公司笔试题sql

    2024-03-30 14:08:01       19 阅读