UVA1596 Bug Hunt 找Bug 解题报告
题目链接
https://vjudge.net/problem/UVA-1596
题目大意
输入并模拟执行一段程序,输出第一个bug所在的行。每行程序有两种可能:
数组定义,格式为arr[size]。例如a[10]或者b[5],可用下标分别是0~9和0~4。定义之后所有元素均为未初始化状态。
赋值语句,格式为arr[index]=value。例如a[0]=3或者a[a[0]]=a[1]。
赋值语句可能会出现两种bug:下标index越界;使用未初始化的变量(index和value都可能出现这种情况)。
程序不超过1000行,每行不超过80个字符且所有常数均为小于2^31的非负整数。
解题思路
因为存在嵌套,所以解析一个数组变量的值要用递归或者栈,用map维护数组名到数组信息结构体的映射,数组信息结构体应该包括数组的大小,以及该数组各个下标的值(用map< int, int >来记录)。具体实现细节见代码和注释。
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
#define endl '\n';
const int maxn = 1e3 + 10;
const int INF = 0x3fffffff;
const int mod = 1e9 + 7;
struct Arra { // 数组信息结构体int size; // 该数组的大小map<int, int> value; // 该数组各下标的值
};
map<string, Arra> ArrInfo; // 数组名到数组信息结构体的映射
const string err = "!!!";// 声明、创建一个数组
void createArr(const string& s) {int pos = s.find('[');string arrName = s.substr(0, pos);int size = 0;for (int i = pos + 1; i < s.size() - 1; i++) {size = size * 10 + (s[i] - '0');}ArrInfo[arrName] = {size};
}/*得到一个数组对应下标位置的值,如果该值不存在则函数返回值返回-1(题目保证变量值不会有负数,所以可以用-1代表值不存在),arrName是一个引用变量,正常情况下返回数组变量名,在该变量名不存在的时候会捎带回一个"!!!"来表示数组名不存在,index也是引用变量,正常情况下返回数组下标(用于给等号左边的数组赋值),在数组的该下标位置未初始化值的时候捎带回-1
*/
int getValue(const string& s, string &arrName, int& index) {int pos = s.find('[');arrName = s.substr(0, pos); // 分割出数组变量名if (!ArrInfo.count(arrName)) { // 数组变量名不存在arrName = err;return -1;}index = 0;string tmps;int tmpi = 0;if (isdigit(s[pos + 1])) { // []内是数字,直接得到数值for (int i = pos + 1; i < s.size(); i++) {if (s[i] == ']')break;tmpi = tmpi * 10 + (s[i] - '0');}index = tmpi;} else { // []内是一个数组名,递归获取值index = getValue(s.substr(pos + 1), tmps, tmpi);}auto &value = ArrInfo[arrName].value;if (tmpi == -1 || index >= ArrInfo[arrName].size) {index = -1;return -1;}if (!value.count(index)) {return -1;}return value[index];
}void solve() {string line;while (cin >> line, line[0] != '.') {int cnt = 1;ArrInfo.clear();if (line.find('=') == -1) { // 没有=,是数组初始化语句createArr(line);}string s;int ans = 0;while (cin >> s, s[0] != '.') {cnt++;if (ans != 0)continue;int pos = s.find('=');if (pos == -1) {createArr(s);continue;}string arrName1, arrName2;int index1, index2;getValue(s.substr(0, pos), arrName1, index1);if (arrName1 == err || index1 == -1) {ans = cnt;continue;}int a2 = 0;if (isdigit(s[pos + 1])) {for (int i = pos + 1; i < s.size(); i++) {a2 = a2 * 10 + (s[i] - '0');}} else {a2 = getValue(s.substr(pos + 1), arrName2, index2);}if (a2 == -1) {ans = cnt;continue;}ArrInfo[arrName1].value[index1] = a2;}cout << ans << endl;}
}int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout << fixed;cout.precision(18);solve();return 0;
}
相关文章:
UVA1596 Bug Hunt 找Bug 解题报告
题目链接 https://vjudge.net/problem/UVA-1596 题目大意 输入并模拟执行一段程序,输出第一个bug所在的行。每行程序有两种可能: 数组定义,格式为arr[size]。例如a[10]或者b[5],可用下标分别是0~9和0~4…...
Java编程题 | 提取整数的特定位数
大家可以关注一下专栏,方便大家需要的时候直接查找,专栏将持续更新~ 题目描述 编写一个Java程序,用于接收一个整数作为输入,然后从该整数的右端开始提取第4到第7位数字。 程序需要接收一个整数作为输入,然后输…...
设置你的第一个React应用
目录 一、React入门 1.1 你好React 1.2 创建React 1.3 应用结构 二、总结 2.1 定义组件 2.2 组件源码 三、组件详解 注意事项 3.1 组件三部曲 3.2 组件通信 —— props 3.3 对象数组迭代 —— map() 3.4 事件处理 3.5 钩子函数 —— useState() 初次学习最终效果…...
【黑马头条】-day07APP端文章搜索-ES-mongoDB
文章目录 今日内容1 搭建es环境1.1 拉取es镜像1.2 创建容器1.3 配置中文分词器ik1.4 测试 2 app文章搜索2.1 需求说明2.2 思路分析2.3 创建索引和映射2.3.1 PUT请求添加映射2.3.2 其他操作 2.4 初始化索引库数据2.4.1 导入es-init2.4.2 es-init配置2.4.3 导入数据2.4.4 查询已导…...
SSL数字证书
SSL数字证书产品提供商主要来自于国外,尤其是美国,原理和使用操作系统一样,区别在于SSL数字证书目前无法替代性,要想达到兼容性99%的机构目前全球才3-4家,目前国内的主流网站主要使用的是国际证书,除了考虑…...
番茄 abogus rpc调用
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章…...
CSS设置元素的宽高比
aspect-ratio 是一个CSS属性,它允许你指定一个元素的期望宽高比。当元素的宽度变化时,其高度会自动调整以保持指定的宽高比。这个属性非常有用,特别是当你想要确保某个元素(如视频或图像容器)始终保持特定的宽高比时。…...
jenkins+docker实现可持续自动化部署springboot项目
目录 一、前言 二、微服务带来的挑战 2.1 微服务有哪些问题 2.2 微服务给运维带来的挑战 三、可持续集成与交付概述 3.1 可持续集成与交付概念 3.1.1 持续集成 3.1.2 持续交付 3.1.3 可持续集成与交付核心理念 3.2 可持续集成优点 3.3 微服务为什么需要可持续集成 四…...
【LAMMPS学习】八、基本知识的讨论(1.8)键的断裂
8. 基本知识的讨论 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和…...
GPT提示词分享 —— 中医
👉 中医诊断涉及因素较多,治疗方案仅供参考,具体的方子需由医生提供。AI建议不能替代专业医疗意见,如果症状严重或持续,建议咨询专业医生。 我希望你能扮演一位既是老中医同时又是一个营养学专家,我讲描述…...
什么的零日攻击,如何防御零日攻击
零日漏洞通常是指还没有补丁的安全漏洞,零日攻击则是指利用零日漏洞对系统或软件应用发动的网络攻击。由于零日漏洞的严重级别通常较高,所以零日攻击往往也具有很大的破坏性。目前,任何安全产品或解决方案都不能完全防御住零日攻击。但是&…...
MySQL 建表语句详解
目录 基本建表语句 数据类型 列级约束 表级约束 表选项 示例 基本建表语句 CREATE TABLE table_name (column_name1 data_type(size) [column_constraints],column_name2 data_type(size) [column_constraints],...[table_constraints] ) [table_options]; table_name:…...
【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化
CRM系统 CRM(Customer Relationship Management,客户关系管理)系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中,CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。本文将…...
P8707 [蓝桥杯 2020 省 AB1] 走方格
原题链接:[蓝桥杯 2020 省 AB1] 走方格 - 洛谷 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 2.思路分析 题目大意:现在有个人站在第 1 行第 1 列,要走到第 i 行第 j 列(每次只能向右或者向下走)࿰…...
Window安装PostgresSQL
PostgreSQL 安装参考:Windows下安装PostgreSQL_window 安装postgresql-CSDN博客 安装好后打开pgAdmin4 配置Navicat连接PostgresSQL 找到安装目录文件 pg_hba.conf 修改配置增加: 修改前: # TYPE DATABASE USER ADDRES…...
竞赛升温,量子革命待发
人工智能已经吸引了全球企业巨头和政界领袖的广泛关注。同时,一场激烈的全球竞赛正在展开,目标是开发被许多专家视为下一个领域革命性技术的量子计算。 量子计算机利用量子物理学的原理,有潜力推动包括药物研究、股票市场分析以及数据加密在内…...
登录压力测试
目录 一、准备测试数据 1.1数据库存储过程添加数据 1.2导出为csv作为测试数据(账号、密码) 二、使用fiddler抓包查看接口 2.1.抓到相关接口信息 2.2添加线程组和http请求 2.3将前面接口需要的参数去json格式化 2.4填写相关信息 2.5添加http…...
Linux服务器上搭建深度学习环境(安装anaconda、创建虚拟环境、安装pytorch)
Linux服务器的搭配 Linux服务器上安装anaconda创建虚拟环境linux上安装pytorchxshell连接服务器 Linux服务器上安装anaconda 链接 创建虚拟环境 参考教程:此处 linux上安装pytorch 链接 xshell连接服务器 链接...
SRNIC、选择性重传、伸缩性、连接扩展性、RoCEv2优化(六)
参考论文SRDMA(A Scalable Architecture for RDMA NICs ):https://download.csdn.net/download/zz2633105/89101822 借此,对论文内容总结、加以思考和额外猜想,如有侵权,请联系删除。 如有描述不当之处&…...
【神经网络】生成对抗网络GAN
生成对抗网络GAN 欢迎访问Blog总目录! 文章目录 生成对抗网络GAN1.学习链接2.GAN结构2.1.生成模型Generator2.2.判别模型Discrimintor2.3.伪代码 3.优缺点3.1.优势3.2.缺点 4.pytorch GAN4.1.API4.2.GAN的搭建4.2.1.结果4.2.2.代码 4.3.示意图:star: 1.学习链接 …...
ONNXRuntime GPU推理想用BFloat16加速?手把手教你搞定PyTorch + CUDA环境配置与避坑
ONNXRuntime GPU推理想用BFloat16加速?手把手教你搞定PyTorch CUDA环境配置与避坑 在深度学习模型部署领域,BFloat16数据类型正逐渐成为提升推理性能的新宠。这种16位浮点格式保留了与32位浮点相同的指数位,在保持数值范围的同时减少了内存占…...
MemPrivacy:面向端云智能体的隐私保护个性化记忆管理框架
之前文章介绍过:89.2%攻击成功率!腾讯、字节研究发现 OpenClaw Agent 存在可利用结构性漏洞 今天介绍一个 MemPrivacy 项目,来自 MemTensor、荣耀和同济大学的联合团队。 他们的研究让云端智能体能正常"记住你",但永远看…...
NS-USBLoader终极指南:3步搞定Switch游戏管理与RCM注入的完整教程
NS-USBLoader终极指南:3步搞定Switch游戏管理与RCM注入的完整教程 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcode.c…...
Forge模组开发效率提升:Gradle插件自动化构建与热部署实践
1. 项目概述:一个为Forge模组开发者准备的“瑞士军刀”如果你是一名Minecraft Forge模组的开发者,或者你正打算踏入这个充满创造力的领域,那么你大概率经历过这样的场景:为了测试一个简单的功能改动,你需要反复地执行g…...
AI模型部署实战:基于FastAPI与Tauri构建OpenClaw模型GUI应用
1. 项目概述与核心价值最近在AI应用开发圈里,一个名为“GrahamMiranda-AI/openclaw-model-gui”的项目引起了我的注意。乍一看这个标题,它融合了“openclaw-model”和“gui”两个关键部分,这让我立刻联想到一个典型的场景:一个已经…...
窗口大小控制神器:3分钟掌握WindowResizer的终极窗口调整技巧
窗口大小控制神器:3分钟掌握WindowResizer的终极窗口调整技巧 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的应用程序窗口而束手无策吗?是…...
Iris API错误处理机制与嵌入式系统优化实践
1. Iris API错误处理机制解析在嵌入式系统开发中,API的健壮性直接影响整个系统的稳定性。Iris框架作为ARM架构下的核心组件,其错误处理机制基于JSON-RPC 2.0规范进行了深度定制,特别适合资源受限的嵌入式环境。与通用Web API不同,…...
Arm Morello平台模型与CHERI安全扩展开发指南
1. Arm Morello平台模型概述Morello是Arm公司推出的实验性处理器架构,基于CHERI(Capability Hardware Enhanced RISC Instructions)安全扩展技术。这个平台模型本质上是一个功能准确的虚拟硬件环境,允许开发者在物理芯片问世前18-…...
Lingoose:轻量级LLM编排框架的设计哲学与工程实践
1. 项目概述:从“Lingo”到“Goose”,一个轻量级LLM编排框架的诞生最近在折腾大语言模型应用开发的朋友,估计都绕不开一个核心问题:如何高效、优雅地编排和串联多个LLM调用、工具调用以及数据处理流程?当你从简单的单次…...
Claude模型思维链评估框架claweval:原理、实战与高级定制指南
1. 项目概述:一个专为Claude模型设计的“思维链”评估框架最近在AI应用开发圈里,一个名为claweval的项目开始被频繁提及。如果你正在使用Anthropic的Claude系列模型(无论是Claude 3 Opus、Sonnet还是Haiku)来构建需要复杂推理能力…...
