弹指间计算机协会 X Five Pines Robomaster实验室 考核题面与题解(三)

简介: 弹指间计算机协会 X Five Pines Robomaster实验室 考核题面与题解

Sample Input 1

3 
2 4 1 
0 0 1 
0 0 3 
2 5 1 
0 0 1 
0 0 4 
2 5 2 
0 0 2 
2 0 4

Sample Output 1

Yes
No
Yes

Hint

第一组数据,由奶酪的剖面图可见:

第一个空洞在 ( 0 , 0 , 0 )与下表面相切;

第二个空洞在 ( 0 , 0 , 4 ) 与上表面相切;

两个空洞在 ( 0 , 0 , 2 ) 相切。

输出 Yes

第二组数据,由奶酪的剖面图可见:

两个空洞既不相交也不相切。

输出 No

第三组数据,由奶酪的剖面图可见:

两个空洞相交,且与上下表面相切或相交。

输出 Yes

【数据规模与约定】

image.png


题解

建图,设0号点为起点,n+1号点为终点。将每个洞视为图中的点。若洞高度绝对值小于半径r,则起点连到该点。若洞高度大于hr,则该点连到终点。若距离小于半径的两倍,则两个洞所代表的点连一条边。建图完成后,dfs

代码

#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
using namespace std;
typedef long long ll;
vector<int> G[1005];
double ball[1005][4];
bool st[1005];
void dfs(int i){
  st[i]=1;
  for(auto node:G[i]){
    if (!st[node])
      dfs(node);
  }
}
signed main(){
  freopen("res.in","r",stdin);
  freopen("res.out","w",stdout);
  int t;
  cin>>t;
  while(t--){
    memset(ball,0,sizeof ball);
    memset(st,0,sizeof st);
    int n;
    double h,r;
    cin>>n>>h>>r;
    for(int i=0;i<=n+1;i++)
      G[i].clear(); 
    for(int i=1;i<=n;i++){
      cin>>ball[i][1]>>ball[i][2]>>ball[i][3];
    }
    for(int i=1;i<=n;i++){
      if (ball[i][3]<=r){
        G[0].push_back(i);//0号点为起点,底边
        G[i].push_back(0);
      }
      if (ball[i][3]>=h-r){
        G[n+1].push_back(i);//n+1号点为终点 
        G[i].push_back(n+1);
      }
      for(int j=i+1;j<=n;j++){
        double sqrdst=(ball[i][1]-ball[j][1])*(ball[i][1]-ball[j][1])
              +(ball[i][2]-ball[j][2])*(ball[i][2]-ball[j][2])
              +(ball[i][3]-ball[j][3])*(ball[i][3]-ball[j][3]);
        if (sqrdst<=4*r*r){
          G[i].push_back(j);
          G[j].push_back(i);
        }
      }
    }
    dfs(0);
    if (st[n+1])
      cout<<"Yes\n";
    else
      cout<<"No\n";
  }
}

机器人搬重物

Description

image.png

Output

一个整数,表示机器人完成任务所需的最少时间。如果无法到达,输出1

Sample Input 1

9 10
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 0
7 2 2 7 S

Sample Output 1

12

题解

image.png

代码

#include<iostream>
#include<queue>
#include<cstring>
#include<map>
#include<iomanip>
using namespace std;
struct posd{
  int x, y, d;
};
int collidx[4] = { -1, 0,-1,0 };//障碍物
int collidy[4] = { -1,-1, 0,0 };
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };
int dist[55][55][4];//0 北 1南 2西 3东
map<char, int> c2i = {{'N',0},{'S',1},{'W',2},{'E',3}};
int ditu[55][55];
int n, m;
bool collide(int x, int y) {
  if (x == 0 || y == 0 || x >= n || y >= m)
    return true;
  for (int k = 0;k < 4;k++) {
    int tx = x + collidx[k];
    int ty = y + collidy[k];
    if (ditu[tx][ty] == 1)
      return true;
  }
  return false;
}
int main() {
  cin >> n >> m;
  for (int i = 0;i < n;i++)
    for (int j = 0;j < m;j++)
      cin >> ditu[i][j];
  int startx, starty, endx, endy;
  char startd;
  cin >> startx >> starty >> endx >> endy;
  cin >> startd;
  memset(dist, 0x3f3f3f3f, sizeof dist);
  queue<posd> q;
  q.push({ startx,starty,c2i[startd] });
  dist[startx][starty][c2i[startd]] = 0;
  while (!q.empty()) {
    auto p= q.front();
    q.pop();
    if (p.d == 0 || p.d == 1) {//从南北转到东西
      if (dist[p.x][p.y][2] == 0x3f3f3f3f) {
        dist[p.x][p.y][2] = dist[p.x][p.y][p.d] + 1;
        q.push({ p.x,p.y,2 });
      }
      if (dist[p.x][p.y][3] == 0x3f3f3f3f) {
        dist[p.x][p.y][3] = dist[p.x][p.y][p.d] + 1;
        q.push({ p.x,p.y,3 });
      }
    }
    if (p.d == 2 || p.d == 3) {//从东西转到南北
      if (dist[p.x][p.y][0] == 0x3f3f3f3f) {
        dist[p.x][p.y][0] = dist[p.x][p.y][p.d] + 1;
        q.push({ p.x,p.y,0 });
      }
      if (dist[p.x][p.y][1] == 0x3f3f3f3f) {
        dist[p.x][p.y][1] = dist[p.x][p.y][p.d] + 1;
        q.push({ p.x,p.y,1 });
      }
    }
    //往对应方向走1/2/3步
    int tx = p.x, ty = p.y;
    for (int _ = 0;_ <3;_++) {
      tx +=dx[p.d];
      ty +=dy[p.d];
      if (collide(tx, ty))
        break;
      if (dist[tx][ty][p.d] != 0x3f3f3f3f)
        continue;
      dist[tx][ty][p.d] = dist[p.x][p.y][p.d] + 1;
      q.push({ tx,ty,p.d });
    }
  }
  int res = 0x3f3f3f3f;
  for (int k = 0;k < 4;k++)
    res = min(res, dist[endx][endy][k]);
    if (res==0x3f3f3f3f)
        cout<<-1;
    else 
    cout << res << endl;
}
目录
相关文章
|
11月前
|
数据可视化 关系型数据库 MySQL
2023年职业院校技能大赛中职组----大数据应用与服务赛项任务书试题
2023年职业院校技能大赛中职组----大数据应用与服务赛项任务书试题
748 0
|
4月前
|
网络协议 安全 网络安全
【题目】【网络系统管理】2022年江苏省职业院校技能大赛 高职竞赛样题
【题目】【网络系统管理】2022年江苏省职业院校技能大赛 高职竞赛样题
【题目】【网络系统管理】2022年江苏省职业院校技能大赛 高职竞赛样题
|
4月前
|
网络协议 安全 Linux
【题目】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷
【题目】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷
【题目】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷
|
4月前
|
网络协议 安全 数据安全/隐私保护
【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷
【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷
【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷
|
4月前
|
安全 Linux 网络安全
第十六届山东省职业院校技能大赛中职组网络安全赛项竞赛正式试题
第十六届山东省职业院校技能大赛中职组网络安全赛项竞赛正式试题
|
4月前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B-CTF夺旗与攻击
模块C和D是CTF夺旗比赛,分别侧重攻击和防御。作为渗透测试工程师,你需要在靶机(Linux/Windows)上找寻多种漏洞,如命令注入、文件上传、文件包含、远程代码执行和缓冲区溢出,以获取权限。同时,注意不能攻击裁判服务器,违者将被罚离场。提交靶机的唯一标识flag值并按规则加分。模块D中,你需要在堡垒服务器上发现并修复同样类型的漏洞,保证服务可用性,制作系统防御报告,所有截图需清晰,文件以PDF格式保存提交。
67 0
|
4月前
|
安全 Linux 网络安全
第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题—A模块基础设施设置/安全加固
该任务是网络安全工程师模拟实战,目标是强化A模块服务器(Windows和Linux)的安全性。任务包括:设置强密码策略,限制用户权限,如禁用命令提示符,隐藏登录用户名;实施Nginx安全策略,禁止目录浏览,限制HTTP请求,调整超时时间,降权运行;配置日志监控,设定不同日志文件大小及覆盖规则;加固SSHD, VSFTPD, IIS服务,修改SSH端口,限制root登录,调整VSFTPD和IIS设置;优化本地安全策略,禁止匿名访问,保护密码存储,控制用户登录;最后,设计防火墙规则,限制SSH枚举,防御DoS攻击,并控制DNS解析请求。所有更改需截图并附说明,按指定格式保存提交。
49 0
|
4月前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A-CTF攻击与防御
模块C和D是CTF夺旗比赛,分别聚焦攻击和防御。攻击者需利用各种漏洞(如命令注入、文件上传、远程代码执行等)攻陷靶机,获取权限,但禁止攻击裁判服务器。防御者则需检测并加固堡垒服务器,确保服务可用性,发现并修补同样类型的漏洞。比赛分数依据靶机的flag值和加固报告,强调不提供补时。操作环境涉及Windows和Linux,选手需使用谷歌浏览器登录。注意提交清晰的截图和PDF报告至U盘。
77 0
|
4月前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C基础设施设置/安全加固
网络安全工程师需对AServer08(Win)和AServer09(Linux)进行安全加固,包括密码策略(复杂性、长度),Windows用户管理(所有权、命令提示符、用户名显示),Nginx安全配置(禁止目录浏览、限制HTTP请求、超时设置、降权运行)。日志监控涉及安全、应用和系统日志的最大大小及覆盖策略。中间件服务加固涉及SSH(端口、root登录、计划任务、PID路径),VSFTPD(非特权用户、连接端口、本地用户限制),IIS(日志审计、关闭WebDAV)。本地安全策略涵盖匿名枚举、无登录关闭、凭证存储、权限应用和登录超时
61 0
|
4月前
|
安全 Linux 网络安全
2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A基础设施设置/安全加固
网络安全工程师需加固A模块的Windows和Linux服务器,措施包括:设置强密码策略,限制用户权限,隐藏登录信息,优化Nginx安全配置如禁止目录浏览,限制HTTP请求,调整超时时间并降权运行。实施日志监控,设置不同日志的最大大小和处理方式。加固SSHD、VSFTPD、IIS服务,修改端口,限制root登录,配置计划任务,限制VSFTPD和IIS的访问权限。加强本地安全策略,阻止匿名枚举,禁止未登录关机,禁用某些权限,超时强制注销。最后,配置Linux防火墙规则,限制SSH连接源,防御DoS攻击,并控制DNS解析请求。操作需截图并以Word转PDF形式保存,命名后提交至U盘。
53 0