2022 RoboCom 世界机器人开发者大赛-本科组(国赛)

文章提供了五道编程题目,涉及智能交通信号控制和图论算法。第一题是关于红绿灯智能控制的模拟,第二题是关于5x5格子中避激光的安全路径规划,第三题要求找到无向图中最短路径且最大化点权和,第四题是编辑距离问题,记录操作路径,最后一题是寻找树结构中三元组的特定组合。
摘要由CSDN通过智能技术生成

RC-u1 智能红绿灯

题意:为绿灯时,点击按钮后15s后转为红色持续30s,为红灯时再点击按钮则延长15s并只能延长一次,其它操作无效。

题解:模拟题,需要注意的是按下按钮后15s转为红灯后的点亮时间是闭区间,如第1s按下,红灯显示区间为[16, 45],在这个区间再次点击按钮时才能延长红灯时间。

代码:

// AC
#include <bits/stdc++.h>

using namespace std;
#define PII pair<int, int>
const int N = 1e4+10;
int a[N];
int n;
int flag, l, r, color;
vector<PII> v;

int main()
{
   
	cin >> n;
	for(int i = 0;i < n;i ++)
	{
   
		cin >> a[i];
		int x = a[i];
		if(i && a[i] == a[i-1]) continue;
		// 绿转红
		if(!color) {
   
			l = x + 15;
			r = l + 29;
			flag = 0;
			color = 1;
		}
		// 再次点击 注意红灯区间
		else if(color && !flag && r >= x && l <= x) {
   
			r = r + 15;
			flag = 1;
		}
		// 红转绿 
		else if(color && r < x) {
   
			color = 0;
			if(!v.size() || v.back() != make_pair(l, r)) v.push_back(make_pair(l, r));
			// 绿转红
			l = x + 15;
			r = l + 29;
			flag = 0;
			color = 1;
		}
	}
	if(!v.size() || v.back() != make_pair(l, r)) v.push_back(make_pair(l, r));
	for(int i = 0;i < v.size();i ++)
	{
   
		cout << v[i].first << ' ' << v[i].second << endl;
	}
	return 0;
}

RC-u2 女王的大敕令

题意:在5*5方格中给定终点,上下左右四个方向的怪物,在初始位置时,左右怪物顺时针移动相应行数后进行整行的激光覆盖,在移动一次位置后,上下怪物顺时针移动相应列数后进行整列的激光覆盖,您需要保证确定初始位置和移动一次后的位置,并且这两个位置不会被怪物的激光覆盖,然后可以通过指定步数到达终点。

题解:模拟题,需要注意的是初始位置时是左右两侧怪物移动,上下怪物位置保持不变,而第一次移动位置后是上下两侧怪物移动,左右怪物位置保持不变。我们可以推断出初始和第一次移动后的安全位置,然后4重循环枚举这两个位置,通过移动距离相等来判断是否满足条件,最后排序输出。

代码:

//AC
#include <bits/stdc++.h>

using namespace std;
const int N = 1e5;
int mp[6][6], mp2[6][6];
int c1, c2, r1, r2;
int n[5];
int r, c, d1, d2;
int idx;

struct node
{
   
	int x, y, x2, y2;
}no[N];

bool cmp(node x, node y)
{
   
	if(x.x == y.x && x.y == y.y && x.x2 == y.x2) return x.y2 < y.y2;
	else if(x.x == y.x && x.y == y.y) return x.x2 < y.x2;
	else if(x.x 
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值