当前位置: 首页 > java >正文

2025年睿抗机器人开发者大赛CAIP-编程技能赛(省赛)-RoboCom 世界机器人开发者大赛-本科组

 

RC-u1 早鸟价

代码

#include "bits/stdc++.h"
using namespace std;
int main(){int n;cin>>n;int m, d, q;while(n--){cin>>m>>d>>q;if(m > 7 || m == 7 && d > 11) {cout<<"Too late!"; }else if(m < 6 || m == 6 && d <= 20) {if(q < 1800) cout<<"Need more!";else if(q == 1800) cout<<"Ok!" ;else cout<<"^_^"; }else {if(q < 2000) cout<<"Need more!";else if(q == 2000) cout<<"Ok!" ;else cout<<"^_^";}cout<<endl;}return 0;
}

 RC-u2 谁进线下了?III

代码:

#include "bits/stdc++.h"
using namespace std;
int main(){int T;cin>>T;int n, s;int cnt = 0;int p, f;int summ = 0;while(T--){cin>>n>>s;int m = n;cnt = 0;summ = 0;while(m--){cin>>p>>f;if(p == 1) cnt ++;summ += f;}if(cnt >= n* 1.0 / 2) cout<<"1";else cout<<"0";cout<<" ";if(summ - s >= 50) cout<<"1";else cout<<"0";cout<<endl;}return 0;
}


 RC-u3 点格棋

思路:这题是个模拟,要注意的是判断条件,一是边界,二是下棋人的顺序,三是是否是相邻的格子,然后是连过的不能连,要注意的时候有可能一次连线拿两分,还有就是map如果结构体当键,无论是否里面的数据一样的,都会算成不同的键
代码:

#include "bits/stdc++.h"
using namespace std;
int n, m, s;
int mp[102][102][102][102] = {0};
int check(int x1, int y1, int x2, int y2){int score = 0;if(x1 == x2){if(x1 - 1 >= 1){if(mp[x1 - 1][y1][x1][y1] && mp[x1 - 1][y2][x1][y2] && mp[x1 - 1][y1][x1 - 1][y2])score++;			}if(x1 + 1 <= n ){if(mp[x1 + 1][y1][x1][y1] && mp[x1 + 1][y2][x1][y2] && mp[x1 + 1][y1][x1 + 1][y2] )score++;	}	}else if(y1 == y2){if(y1 - 1 >= 1){if(mp[x1][y1- 1][x1][y1] && mp[x1 ][y1 - 1][x2][y2- 1] && mp[x2][y2 - 1][x2][y2] )score++;}if(y1 + 1 <= m ){if(mp[x1][y1 + 1][x1][y1] && mp[x1 ][y1 + 1][x2][y2+ 1] && mp[x2][y2 + 1][x2][y2])score++;}}return score;
}
int main(){cin>>n>>m>>s;int a, x1, y1, x2, y2; vector<int> v;int cnt = 0;int A = 0, B = 0;int next = 0;for(int i = 1; i <= s; i ++){cin>>a>>x1>>y1>>x2>>y2;if(a == next && x1 >= 1 && y1 >= 1 && x2 >= 1 && y2 >= 1 && x1 <= n && x2 <= n && y1 <= m && y2 <= m&&(abs(x1 - x2 )+abs(y1 - y2) == 1)&&!mp[x1][y1][x2][y2] && (x1 == x2 || y1 == y2)){mp[x1][y1][x2][y2] = 1;mp[x2][y2][x1][y1] = 1;int f = check(x1, y1, x2, y2);if(f == 0) next = 1 - next;if(a == 0) A += f;	else B += f;	} else v.push_back(i),cnt ++;	}if(cnt == 0) cout<<-1;else for(int i = 0; i < v.size();i  ++){cout<<v[i];if(i != v.size() - 1) cout<<" ";}	cout<<endl;if(A > B) cout<<0<<" "<<A;  else cout<<1<<" "<<B;return 0;
} 

 RC-u4 Tree Tree 的

思路:很明显是找环,一个最大的,一个次大的,但是注意他这个图不一定是连通的,也就是说你从一个点开始dfs可能遍历不到所有的点。我这里用了一个dfs来进行判断,也就是一个dfs找一个连通图中所有的环。
代码:

#include "bits/stdc++.h"
using namespace std;
vector<int> g[15];
int ans1 = 1, ans2 = 0;
int pre[60], vis[20], vis1[20];
void dfs(int x, int p){vis[x] = 1;vis1[x] = 1;for(int i = 0; i < g[x].size(); i ++){int t = g[x][i]; vis1[t] = 1;if(vis[t]) {int cnt = 1;int xx = x;while( xx != t){xx = pre[xx];cnt ++;}if(cnt > ans1){ans2 = ans1;ans1 = cnt;		}if(cnt < ans1 && cnt > ans2){ans2 = cnt;} } 		else if(t == p) continue; else if(!vis[t]){pre[t] = x;dfs(t, x);} 	}vis[x] = 0;
}
int main(){int T;cin>>T;while(T--){int n, m, x, y;cin>>n>>m;memset(vis, 0, sizeof(vis));memset(vis1, 0, sizeof(vis1));memset(pre, 0, sizeof(pre));for(int i = 0; i < 11; i ++) g[i].clear();while(m--){cin>>x>>y;g[x].push_back(y);g[y].push_back(x);}ans1 = 1;ans2 = 0;for(int i = 1; i <= n; i ++)if(!vis1[i]) dfs(i, -1);cout<<ans1<<" "<<ans2<<endl;}return 0;
}

 RC-u5 游戏设计师

思路:这题大模拟,耐心做一下就好了,细节比较多,然后的话他这个你注意是1是实心格子,2是易碎格子,直接模拟的话能拿22分,后面两个超时,这时候会想到(我看大家好像都想到了哈哈,本来以为是剪枝但是感觉没有什么好剪得)直接从终点开始遍历就能打表所有的可能了,再多询问也是O(1), 遍历的话直接bfs就可以了,这里注意可能一开始就在终点,这是第1个测试点一分。

代码:

#include "bits/stdc++.h"
using namespace std;
const int N  = 1e3 + 10;
int n, m;
int g[N][N];
int vis[4][1001][1001];
int ex = -1, ey = -1;
struct node{int op;int x, y;int dis;node(int a, int b, int c, int e){op = a, x = b, y = c, dis = e;}
};
queue<node> q;
void bfs(int op, int x, int y){int x1, y1, x2, y2;if(op == 0)q.push(node(0, x, y,  0));else if(op == 1){q.push(node(1, x, y,  0));}else {q.push(node(2, x, y,  0));}int opp = -1;while(q.size()){node t = q.front();q.pop();int op1 = t.op;if(op1 == 0){x1 = t.x - 1, x2 = t.x - 2, y1 = t.y, y2 = t.y, opp = 2;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x2][y1] &&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(2, x2, y1, t.dis + 1));vis[opp][x2][y1] = t.dis + 1;}x1 = t.x + 1, x2 = t.x + 2, y1 = t.y, y2 = t.y, opp = 2;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1]&&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(2, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x, x2 = t.x, y1 = t.y + 1, y2 = t.y + 2, opp = 1;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] &&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(1, x1, y1,  t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x, x2 = t.x, y1 = t.y - 1, y2 = t.y - 2, opp = 1;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x2][y2] &&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(1, x2, y2, t.dis + 1));vis[opp][x2][y2] = t.dis + 1;}}else if(op1 == 1){x1 = t.x - 1, x2 = t.x - 1, y1 = t.y, y2 = t.y + 1, opp = 1;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] &&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(1, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x + 1, x2 = t.x + 1, y1 = t.y, y2 = t.y + 1, opp = 1;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] &&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(1, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x, x2 = 0, y1 = t.y - 1, y2 =  0, opp = 0;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] && (g[x1][y1] == 1 || g[x1][y1] == 3)){q.push(node(0, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x, x2 = 0, y1 = t.y + 2, y2 =  0, opp = 0;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] && (g[x1][y1] == 1|| g[x1][y1] == 3)){q.push(node(0, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}}else if(op1 == 2){x1 = t.x , x2 = t.x + 1, y1 = t.y - 1, y2 = t.y - 1, opp = 2;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] &&  (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(2, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x, x2 = t.x + 1, y1 = t.y + 1, y2 = t.y + 1, opp = 2;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] && (g[x1][y1] == 1  || g[x1][y1] == 2)&& (g[x2][y2] == 1 || g[x2][y2] == 2)){q.push(node(2, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x - 1, x2 = 0, y1 = t.y, y2 =  0, opp = 0;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] && (g[x1][y1] == 1|| g[x1][y1] == 3)){q.push(node(0, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}x1 = t.x + 2, x2 = 0, y1 = t.y, y2 =  0, opp = 0;if(x1 >= 0 && x1 < n && x2 >= 0 && x2 < n && y1 >= 0 && y1 < m && y2 >= 0 && y2 < m && !vis[opp][x1][y1] && (g[x1][y1] == 1|| g[x1][y1] == 3)){q.push(node(0, x1, y1, t.dis + 1));vis[opp][x1][y1] = t.dis + 1;}}}}
int main(){cin>>n>>m;int q;for(int i = 0; i < n; i ++){for(int j = 0; j < m; j ++){scanf("%1d", &g[i][j]);if(g[i][j] == 3){ex = i, ey = j;}} }cin>>q;int x, y, op;bfs(0, ex, ey);while(q--){cin>>x>>y>>op;if(vis[op][x - 1][y - 1] || (op == 0 && x - 1 == ex && y - 1 == ey))cout<<vis[op][x - 1][y - 1]<<endl;else cout<<-1<<endl;}return 0;
}

http://www.xdnf.cn/news/15722.html

相关文章:

  • FreeRTOS学习笔记之软件定时器
  • 【初识数据结构】CS61B中的基本图算法:DFS, BFS, Dijkstra, A* 算法及其来历用法
  • Java-77 深入浅出 RPC Dubbo 负载均衡全解析:策略、配置与自定义实现实战
  • CS231n-2017 Lecture3线性分类器笔记
  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • 用逻辑回归(Logistic Regression)处理鸢尾花(iris)数据集
  • 移除debian升级后没用的垃圾
  • 电商商品综合排序:从需求分析到实时计算的全方位指南
  • 鸿蒙与web混合开发双向通信
  • The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(三)
  • HTTP性能优化实战
  • Matplotlib和Plotly知识点(Dash+Plotly分页展示)
  • Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)
  • Qt笔记整理(1)
  • CCF编程能力等级认证GESP—C++5级—20250628
  • 使用nvm安装node、npm、pnpm以及编译项目教程
  • SpringBoot 3.0 挥别 spring.factories,拥抱云原生新纪元
  • 基于大模型打造故障预警服务器巡检机器人
  • Jetpack Compose中的Modifier:UI元素的装饰与行为扩展
  • 3-大语言模型—理论基础:生成式预训练语言模型GPT(代码“活起来”)
  • [论文阅读] 软件工程 | 用模糊逻辑“解锁”项目成功:告别非黑即白的评估时代
  • 网络基础DAY13-NAT技术
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 基于wordcloud库实现词云图
  • OSPF高级特性之Overflow
  • 浅谈Rust语言特性
  • 1 渗透基础
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - snowNLP库实现中文情感分析
  • 【unitrix】 6.7 基本结构体(types.rs)
  • Python 使用期物处理并发(使用concurrent.futures模块下载)
  • Leetcode刷题营第三十三题:对称二叉树