洛谷解题日记||基础篇2

题目链接

  • 0 = 剪刀,1 = 石头,2 = 布,3 = 蜥蜴人,4 = 斯波克
  • 我们可以根据题意,构建一个二维矩阵 result[5][5] 来表示每一种出拳的胜负情况。

#include <iostream>
#include <vector>
using namespace std;int main() {int N, N_A, N_B;cin >> N >> N_A >> N_B;vector<int> A(N_A), B(N_B);for (int i = 0; i < N_A; i++) {cin >> A[i];}for (int i = 0; i < N_B; i++) {cin >> B[i];}// 胜负关系表:result[a][b]表示a和b的对决结果int result[5][5] = {{0, 0, 1, 1, 0},{1, 0, 0, 1, 0},{0, 1, 0, 0, 1},{0, 0, 1, 0, 1},{1, 1, 0, 0, 0}};int score_A = 0, score_B = 0;for (int i = 0; i < N; i++) {//保证a,b的值在各自的周期内int a = A[i % N_A];int b = B[i % N_B];if (result[a][b] == 1) {  //先判断a是否赢再判断b是否赢score_A++;} else if (result[b][a] == 1) {score_B++;}}cout << score_A << " " << score_B << endl;return 0;
}

#include <iostream>
#include <cstring>
using namespace std;int win[62503];  // 存储每回合的比赛结果,1 为华华胜,2 为对手胜 最大为25*2500=62500
int w, l;  // w 为华华得分,l 为对手得分int main() {char s;// 读取比赛结果,直到遇到字符 'E'for(int i = 1; cin >> s && s != 'E'; i++) {if(s == 'W') win[i] = 1;  // 华华胜else win[i] = 2;  // 对手胜}//---------------- 11 分制 ----------------w = 0; l = 0;  // 初始化比分for(int i = 1; ; i++) {if(win[i] == 1) w++;  // 华华得分if(win[i] == 2) l++;  // 对手得分// 判断是否读到 '0',即比赛结束if(win[i] == 0) {cout << w << ":" << l << endl << endl;  // 输出当前比分break;  // 结束 11 分制部分}// 判断 11 分制结束的条件if(w - l >= 2 || l - w >= 2) {if(w >= 11 || l >= 11) {  // 一方得分大于等于 11 且领先至少 2 分cout << w << ":" << l << endl;  // 输出当前比分w = 0;  // 比分清零,开始下一局l = 0;}}}w = 0; l = 0;  // 清零,为 21 分制做准备//---------------- 21 分制 ----------------for(int i = 1; ; i++) {if(win[i] == 1) w++;  // 华华得分if(win[i] == 2) l++;  // 对手得分// 判断是否读到 '0',即比赛结束if(win[i] == 0) {cout << w << ":" << l;  // 输出最后一局的比分break;  // 结束 21 分制部分}// 判断 21 分制结束的条件if(w - l >= 2 || l - w >= 2) {if(w >= 21 || l >= 21) {  // 一方得分大于等于 21 且领先至少 2 分cout << w << ":" << l << endl;  // 输出当前比分w = 0;  // 比分清零,开始下一局l = 0;}}}return 0;  // 结束程序
}

代码解释:

  1. 输入和存储

    • 通过 cin >> s 循环读取每回合的比赛结果。字符 'W' 表示华华获胜,'L' 表示对手获胜,'E' 表示输入结束。
    • 每个回合的比赛结果存储在 win 数组中,win[i] = 1 表示华华胜,win[i] = 2 表示对手胜。
  2. 11 分制规则

    • 比赛中如果一方的得分大于等于 11 且领先至少 2 分,就输出该局的比分并清零比分,开始下一局。
    • 如果遇到字符 '0'(即比赛结束标志),则输出当前比分并结束 11 分制部分。
  3. 21 分制规则

    • 21 分制与 11 分制类似,但规则要求一方得分达到 21 且领先至少 2 分才能结束局,并清零比分。
    • 同样,遇到字符 '0' 时结束并输出最后比分。

关键点总结:

  1. win[i] 的赋值过程在输入读取时进行:'W' 对应 1'L' 对应 2
  2. win[i] 的值并不是手动设置为 0,而是因为输入流被终止,程序不再读取新的字符。
  3. 当读取到 'E' 时,输入流结束,程序停止继续读取比赛数据。
  4. 程序通过 win[i] == 0 来确定比赛输入的结束,然后停止比赛结果的输出。

 

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;// 判断是否可以通过删除至多 M 个岩石来保证最小跳跃距离不小于 minJump
bool canAchieveMinJumpDistance(const vector<int>& rocks, int L, int M, int minJump) {int removed = 0;  // 用来统计删除的岩石数量int lastPosition = 0;  // 起点的位置// 从第一个岩石开始遍历for (int i = 1; i < rocks.size(); ++i) {if (rocks[i] - lastPosition < minJump) {// 如果当前岩石和上一个岩石之间的跳跃距离小于 minJump,就需要删除当前岩石removed++;} else {// 否则,我们跳到这个岩石,更新 lastPositionlastPosition = rocks[i];}// 如果删除的岩石数超过了 M,就说明当前 minJump 不可行if (removed > M) {return false;}}// 最后检查从最后一个岩石到终点的距离if (L - lastPosition < minJump) {removed++;}return removed <= M;
}int main() {int L, N, M;cin >> L >> N >> M;vector<int> rocks(N + 2);  // +2 是因为我们还要考虑起点0和终点Lrocks[0] = 0;  // 起点for (int i = 1; i <= N; ++i) {cin >> rocks[i];}rocks[N + 1] = L;  // 终点// 二分查找最小的最大跳跃距离int low = 1, high = L;int answer = 0;while (low <= high) {int mid = low + (high - low) / 2;  // 中间值if (canAchieveMinJumpDistance(rocks, L, M, mid)) {answer = mid;  // 如果可以达到这个最小跳跃距离,记录下来low = mid + 1; // 尝试更大的最小跳跃距离} else {high = mid - 1; // 尝试更小的最小跳跃距离}}cout << answer << endl;  // 输出最终的答案return 0;
}
  • L 是终点的坐标。
  • N 是岩石的数量。
  • M 是你可以删除的岩石的最大数量。

接下来,我们用一个 vector<int> 来存储所有的岩石的位置,rocks[0] = 0 表示起点,rocks[N + 1] = L 表示终点。

2canAchieveMinJumpDistance 函数:

这个函数的作用是判断,给定一个 minJump,是否可以通过删除至多 M 个岩石来保证从起点到终点的跳跃距离都不小于 minJump

 

bool canAchieveMinJumpDistance(const vector<int>& rocks, int L, int M, int minJump) {int removed = 0;  // 统计删除的岩石数量int lastPosition = 0;  // 起点的位置// 遍历岩石位置for (int i = 1; i < rocks.size(); ++i) {if (rocks[i] - lastPosition < minJump) {// 如果当前岩石和上一个岩石之间的距离小于 minJump,就删除当前岩石removed++;} else {// 否则,跳到这个岩石,更新 lastPositionlastPosition = rocks[i];}// 如果删除的岩石数超过 M,返回 falseif (removed > M) {return false;}}// 最后检查从最后一个岩石到终点的距离if (L - lastPosition < minJump) {removed++;}return removed <= M;
}
  • removed 用来统计已经删除的岩石数。
  • lastPosition 表示上一个能够跳跃的岩石的位置。
  • 遍历所有岩石,对于每一个岩石,如果它和前一个岩石之间的跳跃距离小于 minJump,那么就考虑删除这个岩石(即 removed++)。
  • 如果删除的岩石数大于 M,那么就返回 false,表示无法满足要求。
  • 最后还需要检查从最后一个岩石到终点之间的距离,若小于 minJump 也需要删除。
3. 二分查找最小的最大跳跃距离:

为了找到最小的最大跳跃距离,我们使用二分查找。

int low = 1, high = L;
int answer = 0;while (low <= high) {int mid = low + (high - low) / 2;  // 计算中间值if (canAchieveMinJumpDistance(rocks, L, M, mid)) {answer = mid;  // 如果可以达到这个最小跳跃距离,记录下这个距离low = mid + 1; // 尝试更大的最小跳跃距离} else {high = mid - 1; // 尝试更小的最小跳跃距离}
}
  • low 表示最小的跳跃距离,从 1 开始。
  • high 表示最大跳跃距离,最大值是终点位置 L
  • 每次我们计算中间的跳跃距离 mid,并通过调用 canAchieveMinJumpDistance 来判断是否能够实现这个跳跃距离。
  • 如果可以实现,说明我们可以尝试更大的跳跃距离,因此将 low 更新为 mid + 1
  • 如果不能实现,说明我们需要减小跳跃距离,因此将 high 更新为 mid - 1

最终,answer 会存储最小的最大跳跃距离。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8294.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

年会必备的抽奖小程序!

感觉一年一度的年会快来了&#xff0c;准备个小的抽奖小程序蛮陶冶情操的&#xff01; 正好今天有空整了一个&#xff0c;简单&#xff0c;简洁&#xff01;&#xff0c;大家也可以玩起来&#xff01; 技术栈&#xff1a; Flask 试玩的链接在这里,有意思的话也可以部署到自己的…

sqoop Oracle 导入到hive 日期时间消失

sqoop脚本&#xff1a; sqoop import -D mapred.job.queue.namehighway \ -D mapreduce.map.memory.mb4096 \ -D mapreduce.map.java.opts-Xmx3072m \ --connect "jdbc:oracle:thin://localhost:61521/LZY2" \ --username LZSHARE \ --password 123456 \ --query &q…

20241108通过iperf3确认中科创达的高通CM6125的WIFI的网速【失败】

20241108通过iperf3确认中科创达的高通CM6125的WIFI的网速【失败】 2024/11/8 15:43 由于以太网不能用&#xff0c;那就测试一下WIFI&#xff0c;iperf3链接/测试异常。 一般认为可能的原因有&#xff1a; 1、CM6125开发板的WIFI不带天线&#xff0c;影响性能。 2、CM6125的And…

Vue项目中点击按钮后浏览器屏幕变黑,再次点击恢复的解决方法

情况说明 点击按钮后出现以下情况&#xff0c;浏览器屏幕变暗&#xff0c;再次点击则恢复正常。 解决方法&#xff1a; 找到你的全局样式文件&#xff0c;我的是gloable.css&#xff0c;添加以下代码&#xff1a; .v-modal {display: none; }重启服务器即可解决。

05栈和队列/代码随想录

六、栈和队列 6.1数据结构的应用 用栈实现队列 力扣232 很简单&#xff0c;添加的时候正常加在弹入栈&#xff0c;删除的时候把元素放到弹出栈&#xff0c;直接调用java集合实现的Stack class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackout;public M…

51c大模型~合集18

我自己的原文哦~ https://blog.51cto.com/whaosoft/11621494 #SpatialBot 空间大模型&#xff1a;上交、斯坦福、智源、北大、牛津、东大联合推出&#xff01; 大模型走向空间智能、具身智能之路&#xff01; 智源&#xff0c;斯坦福&#xff0c;北大&#xff0c;牛津&…

国外白帽故事 | 攻破大学数据库系统,暴露数千学生记录

引言 在这篇文章中&#xff0c;我将分享我是如何攻破一个大型大学解决方案门户服务器的&#xff0c;这个服务器服务于许多大学客户&#xff0c;并且涉及数千名学生的数据。 目标 这是一个由印度许多大学和学院使用的门户网站&#xff0c;用于管理学生记录、成绩单、出勤记录…

苍穹外卖05-Redis相关知识点

目录 什么是Redis&#xff1f; redis中的一些常用指令 value的5种常用数据类型 各种数据类型的特点 Redis中数据操作的常用命令 字符串类型常用命令&#xff1a; 哈希类型常用命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在java中操作Redis 环境…

【MySQL】数据的增删查改

文章目录 1. 插入数据(Create)1.1 全列插入1.2 指定列插入1.3 多行数据插入1.4 插入否则更新1.5 替换 2. 读取数据(Retrieve)2.1 select列2.2 where条件2.3 结果排序2.4 筛选分页结果 3. 修改数据(Update)4. 删除数据(delete)4.1 删除数据4.2 截断表 5. 插入查询的结果6. 分组与…

【案例分享】借助 iSpring,创造客户真正欣赏的专业在线培训体验

Safety Bee Training是一家领先的认证在线学习提供商&#xff0c;专门提供职业健康、安全和环境项目。它也是中东和亚洲唯一一家提供经 NASP 等国际认证机构认可的课程的培训提供商。它已经培训了超过 28,000 名学习者&#xff0c;并且正在不断扩大其课程范围&#xff0c;以提供…

【连续多届检索,ACM出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 会议官网&#xff1a;www.icbar.net 2024 4th International Conference on Big Data, Artificial I…

界面设计软件:10款设计师必备工具

UI界面设计软件是设计师们不可或缺的工具&#xff0c;它们提供了一系列功能和直观的操作界面&#xff0c;助力设计师迅速打造精美且用户友好的界面。面对众多UI设计软件&#xff0c;有的提供预设模板和图标库&#xff0c;有的更侧重于原型和交互设计。如何选择最适合自己的UI设…

TCP(上):成熟可靠的传输层协议

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! TCP&#xff08;传输控制协议&#xff09;是位于传输层的通信协议&#xff0c;是一种面向连接的、可靠的、基于字节流的传输层通信协议。主要负责在不可靠的网络环境中提供可靠的端到端字节流传输服务。TCP是…

如何在Windows中检查是否安装了GPU

文章目录 1. 系统设备管理器1.1 打开设备管理器1.2 查找显示适配器 2. 命令行工具2.1 打开命令提示符2.2 执行WMIC命令 3. DirectX诊断工具3.1 运行DirectX诊断工具3.2 查看显示信息 在Windows操作系统中&#xff0c;了解您的电脑是否配备了图形处理单元&#xff08;GPU&#x…

网络技术----wireshark抓包出现1500以上的大包原因分析

网络技术----wireshark抓包出现1500以上的大包原因分析 背景描述原因分析TSO&#xff08;TCP segment offload&#xff0c;TSO&#xff09;linux中关闭/开启TSO功能&#xff1a;其他类似TSO的机制 wireshark抓包来源 背景描述 我们在使用抓包工具的过程中&#xff0c;经常发现…

3.3 软件需求:面对对象分析模型

面对对象分析模型 1、对象2、面对对象的软件开发模型3、用例图建模基础3.1 用例图基本符号参与者用例系统执行关联 3.2 用例建模过程3.3 用例图初步3.4 用例图进阶关联Association泛化Inheritance包含Include扩展Extend示例 1、对象 在现实世界中有意义的&#xff0c;与所要解…

跑批为什么这么难

业务系统产生的明细数据通常要经过加工处理&#xff0c;按照一定逻辑计算成需要的结果&#xff0c;用以支持企业的经营活动。这类数据加工任务一般会有很多个&#xff0c;需要批量完成计算&#xff0c;在银行和保险行业常常被称为跑批&#xff0c;其它像石油、电力等行业也经常…

深⼊理解指针(3)【数组与指针】

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. 冒泡排序 5. ⼆级指针 6. 指针数组 7. 指针数组模拟⼆维数组 一 数组名的理解 由上图可知我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址…

ubuntu【桌面】 配置NAT模式固定IP

DHCP分配导致虚拟机IP老变&#xff0c;SSH老要重新配置&#xff0c;设成静态方便些 一、设NAT模式 1、设为NAT模式 2、看模式对应的虚拟网卡 - VMnet8 3、共享主机网卡网络到虚拟网卡 - VMnet8 二、为虚拟网卡设置静态IP 记住这个IP IP不要与网关重复 这里网关注意要与虚拟…

最强攻略密码 | 腾讯云双十一活动爆款直击底价

前言 每年双十一&#xff0c;腾讯云都会推出一系列的优惠活动&#xff0c;吸引着大量的消费者和开发者参与。作为国内领先的云计算服务商之一&#xff0c;腾讯云不仅提供强大的云计算基础设施服务&#xff0c;还涉及云存储、大数据分析、人工智能等多个领域&#xff0c;而双十…