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

UVa 215 Spreadsheet Calculator

题目分析本题要求实现一个简单的电子表格计算器。电子表格是一个矩形网格每个单元格包含一个整数或者一个表达式。表达式由整数常量、单元格引用以及和-运算符组成计算时遵循从左到右的结合顺序。输入首先给出行数rrr和列数ccc其中r≤20r \leq 20r≤20c≤10c \leq 10c≤10。行用大写字母A\texttt{A}A到T\texttt{T}T标记列用数字000到999标记因此单元格A0\texttt{A0}A0表示第111行第111列。随后按行主序输入每个单元格的内容。输入以0 0结束。输出要求分为两种情况如果所有单元格都能成功计算无循环引用则输出整个表格列号右对齐宽度为666每行以行字母开头。如果存在循环引用导致部分单元格无法计算则按行主序输出所有未计算单元格的标签、原始表达式每个单元格一行。解题思路核心难点本题的核心难点在于处理循环依赖。例如单元格A1\texttt{A1}A1引用了B1\texttt{B1}B1而B1\texttt{B1}B1又引用了A1\texttt{A1}A1这就形成了循环引用导致无法计算出数值。解决方案我们可以采用带标记的深度优先搜索DFS\texttt{DFS}DFS 来计算每个单元格的值表达式预处理对于每个单元格的原始表达式将运算符和-用空格包围以便后续使用字符串流进行拆分。注意减法运算符前的负号需要与操作数分开处理。递归求值定义函数evaluate(i, j)计算单元格(i,j)(i, j)(i,j)的值。在求值过程中如果当前单元格已经计算过直接返回其值。否则将其表达式拆分成若干项每个项是整数或单元格引用。对于每个项调用getValue获取其值。如果getValue返回false说明存在循环引用则当前单元格也无法计算。循环检测使用一个集合undefined记录当前递归路径上正在计算的单元格标签。当遇到一个已经在集合中的单元格引用时说明形成了循环此时返回false。这就是典型的DFS\texttt{DFS}DFS环检测方法。输出处理遍历所有单元格尝试计算。如果全部成功输出格式化表格。否则输出所有未成功计算的单元格的原始表达式。代码结构说明trim(line)去除行末尾的空白字符。split(line)将表达式中的运算符和-替换为空格便于分词。注意减法运算符前插入一个空格使其成为独立的负号标记。getValue(variable, value)解析一个字符串项可能为整数或单元格引用递归计算其数值。evaluate(i, j)计算当前单元格的值。calculate()主计算函数决定最终输出格式。代码实现// Spreadsheet Calculator// UVa ID: 215// Verdict: Accepted// Submission Date: 2016-04-30// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intcell[20][10];// 存储每个单元格的计算结果boolcalculated[20][10];// 标记单元格是否已成功计算string original[20][10];// 存储单元格的原始表达式string expression[20][10];// 存储预处理后的表达式便于拆分introws,columns;// 表格的行数和列数setstringundefined;// 存储当前递归路径上的单元格标签用于检测循环引用// 去除字符串末尾的空白字符stringtrim(string line){for(intiline.length()-1;i0;i--)if(isblank(line[i]))line.erase(line.begin()i);returnline;}// 预处理表达式将 和 - 替换为空格便于字符串流拆分stringsplit(string line){for(intiline.length()-1;i0;i--){if(line[i])line[i] ;elseif(line[i]-)line.insert(line.begin()i, );// 在 - 前插入空格}returnline;}boolevaluate(int,int);// 获取一个操作数的值操作数可以是整数或单元格引用boolgetValue(string variable,intvalue){intsign1;if(variable[0]-){sign-1;variable.erase(variable.begin());}// 如果操作数是单元格引用以字母开头if(isalpha(variable[0])){intiivariable[0]-A;intjjvariable[1]-0;if(calculated[ii][jj]){valuesign*cell[ii][jj];returntrue;}else{// 检测循环引用如果当前单元格已在递归路径中if(undefined.count(variable)0)returnfalse;undefined.insert(variable);// 标记进入当前单元格if(evaluate(ii,jj))// 递归计算引用的单元格{undefined.erase(variable);// 递归返回清除标记calculated[ii][jj]true;valuesign*cell[ii][jj];returntrue;}returnfalse;}}// 操作数是整数常量else{valuesign*stoi(variable);returntrue;}}// 计算单元格 (i, j) 的值boolevaluate(inti,intj){string variable;vectorstringvariables;istringstreamiss(expression[i][j]);// 拆分预处理后的表达式得到各个操作数while(issvariable)variables.push_back(variable);intsum0;for(inti0;ivariables.size();i){intvalue;if(getValue(variables[i],value))sumvalue;elsereturnfalse;}cell[i][j]sum;calculated[i][j]true;returntrue;}// 主计算函数voidcalculate(){intcellCalculated0;for(inti0;irows;i)for(intj0;jcolumns;j){undefined.clear();if(calculated[i][j]||evaluate(i,j))cellCalculated;}// 所有单元格均成功计算输出整个表格if(cellCalculatedrows*columns){cout ;for(inti0;icolumns;i)coutsetw(6)righti;coutendl;for(inti0;irows;i){cout(char)(Ai);for(intj0;jcolumns;j)coutsetw(6)rightcell[i][j];coutendl;}}// 存在循环引用输出所有未计算的单元格的原始表达式else{for(inti0;irows;i)for(intj0;jcolumns;j)if(calculated[i][j]false)cout(char)(Ai)j: original[i][j]endl;}}intmain(){cin.tie(0);cin.sync_with_stdio(false);string line;while(cinrowscolumns,rowscolumns){cin.ignore();for(inti0;irows;i)for(intj0;jcolumns;j){getline(cin,line);original[i][j]trim(line);expression[i][j]split(original[i][j]);calculated[i][j]false;cell[i][j]0;}calculate();coutendl;}return0;}

相关文章:

UVa 215 Spreadsheet Calculator

题目分析 本题要求实现一个简单的电子表格计算器。电子表格是一个矩形网格,每个单元格包含一个整数或者一个表达式。表达式由整数常量、单元格引用以及 和 - 运算符组成,计算时遵循从左到右的结合顺序。 输入首先给出行数 rrr 和列数 ccc,其…...

GPU渲染管线ROP单元优化与体积渲染性能提升

1. GPU渲染管线中的ROP单元深度解析在图形渲染管线中,Render Output Unit(ROP)扮演着至关重要的角色。作为渲染流程的最后阶段,ROP负责执行深度测试(Z-Test)、模板测试(Stencil Test&#xff09…...

构建数据科学AI代理规则库:从自动化到智能化的关键路径

1. 项目概述:一个为数据科学工作流定制的智能代理规则库最近在GitHub上看到一个挺有意思的项目,叫ds-agent-rules。光看名字,你可能觉得这又是一个平平无奇的规则文件集合。但作为一个在数据科学和自动化领域摸爬滚打多年的从业者&#xff0c…...

芯片高加速温湿度测试HAST:从步骤到报告讲解

其可靠性和稳定性成为消费者和制造商关注的焦点。高加速温湿度测试(Highly Accelerated Stress Test, HAST)作为一种有效的可靠性测试方法,近年来在行业内得到了广泛的应用。本文将从HAST测试的步骤、实际案例以及如何生成详细的测试报告等方…...

Linux串口通信终极指南:3步搞定CH341SER驱动安装,让Arduino开发不再卡壳

Linux串口通信终极指南:3步搞定CH341SER驱动安装,让Arduino开发不再卡壳 【免费下载链接】CH341SER CH341SER driver with fixed bug 项目地址: https://gitcode.com/gh_mirrors/ch/CH341SER 你是否曾经兴奋地拿起一块Arduino开发板,准…...

使用Taotoken平台后API调用延迟与稳定性的实际体感观察

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken平台后API调用延迟与稳定性的实际体感观察 1. 迁移背景与初始考量 我们团队的一个内部知识库问答应用,原…...

FreeRTOS和RT-Thread的内存管理实战:如何正确使用pvPortMalloc与rt_malloc替代C库malloc

FreeRTOS与RT-Thread内存管理实战:从标准库陷阱到RTOS最佳实践 在嵌入式实时操作系统开发中,动态内存分配就像高空走钢丝——一步失误可能导致系统崩溃。传统C库的malloc/free在RTOS环境中如同穿着拖鞋走钢丝,而pvPortMalloc和rt_malloc则是专…...

Origin 9 绘图避坑指南:7个高频问题解决,让你的科研图表一次成型

Origin 9 科研绘图实战:7个高频问题深度解析与优化方案 科研绘图是数据可视化的重要环节,而Origin 9作为经典的科学绘图软件,其功能强大但操作细节繁多。许多用户在初次接触或日常使用中常会遇到各种棘手问题,导致绘图效率低下、图…...

开源作战室框架OpenClaw-Warroom:构建高效事件响应与团队协作平台

1. 项目概述:从“作战室”到开源协作的实战推演如果你在开源社区或者技术团队里待过一段时间,大概率听过“作战室”这个词。它听起来有点军事化,但在现代软件开发和应急响应场景里,它代表的是一个高度聚焦、信息透明、行动同步的虚…...

任天堂Switch游戏文件管理终极指南:NSC_BUILDER一站式解决方案

任天堂Switch游戏文件管理终极指南:NSC_BUILDER一站式解决方案 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights …...

openclaw-nerve:构建自包含应用包,彻底解决跨平台部署难题

1. 项目概述与核心价值最近在折腾一些自动化脚本和工具链,发现很多开源项目在依赖管理、环境配置和跨平台部署上,依然存在不小的摩擦。一个典型的场景是:你从GitHub上clone了一个看起来很酷的项目,满心欢喜地准备跑起来看看效果&a…...

告别虚拟机卡顿:在Proxmox VE 7.0上丝滑安装中兴新支点NewStartOS 4.3.8社区版

告别虚拟机卡顿:在Proxmox VE 7.0上丝滑安装中兴新支点NewStartOS 4.3.8社区版 虚拟化技术已成为现代IT基础设施的核心组件,而Proxmox VE作为开源的虚拟化管理平台,凭借其稳定性和灵活性赢得了众多技术团队的青睐。在众多虚拟化应用场景中&am…...

AI编程助手统一工作空间框架:声明式配置提升开发效率

1. 项目概述:为AI编程助手打造的统一工作空间框架如果你和我一样,每天都在用Cursor、GitHub Copilot这类AI编程助手,那你肯定也遇到过这个痛点:每次开新项目,或者切换到一个稍微复杂点的多项目工作区,都得从…...

从Arduino官网的‘eagle-files’说起:给硬件新手的Autodesk Eagle PCB设计入门指南

从Eagle文件到PCB设计:开源硬件爱好者的实战入门指南 在开源硬件社区里,Arduino项目的"eagle-files"文件夹常常让新手感到困惑又好奇。这些文件背后隐藏着一个强大的工具链——Autodesk Eagle,它是欧美开源硬件生态中PCB设计的通用…...

别再手撸流程图了!用Vue-super-flow + Element UI 10分钟搞定审批流原型

用Vue-super-flow Element UI快速构建企业级审批流原型 在企业内部管理系统中,审批流程是最常见的功能需求之一。传统的手工绘制流程图方式不仅效率低下,而且难以与业务系统无缝集成。现在,借助Vue-super-flow这一强大的Vue流程图组件&#…...

AI代理如何通过MCP协议实现DeFi自动化操作与策略执行

1. 项目概述:当DeFi遇上AI代理,Robocular/defi-mcp的诞生最近在捣鼓链上自动化策略和AI代理,发现了一个挺有意思的项目——Robocular/defi-mcp。简单来说,这是一个专门为AI代理(特别是那些基于MCP,也就是Mo…...

RedBox容器编排工具:在Docker与K8s间的轻量级生产实践

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫Jamailar/RedBox。乍一看这个名字,你可能会联想到一个红色的盒子,或者某种特定的工具。实际上,它确实是一个“盒子”,一个用于构建、管理和部署容器化应用的…...

从玩具到工具:Dobot Magician桌面机械臂开箱与Blockly图形化编程初体验

从玩具到工具:Dobot Magician桌面机械臂开箱与Blockly图形化编程初体验 第一次见到Dobot Magician时,它安静地躺在包装箱里,像一件精致的工业艺术品。作为一款定位教育和个人创客市场的桌面级机械臂,它的价格只有工业机械臂的零头…...

NeumAI向量检索平台:构建生产级RAG应用的端到端Pipeline实践

1. 项目概述:从“Neum”到“AI”,一个向量检索系统的诞生最近在折腾RAG(检索增强生成)应用,发现向量检索这块的性能和成本,简直是决定项目成败的“命门”。自己从零开始搭一套,从数据清洗、向量…...

基于LLM与Playwright的智能网页自动化:Web-Use项目实战解析

1. 项目概述:一个能“看懂”网页的智能体 如果你也厌倦了那些重复、繁琐的网页操作——比如在不同电商平台比价、手动填写表单、或者从一堆搜索结果里筛选信息——那么今天聊的这个项目,你可能会非常感兴趣。它叫 Web-Use ,本质上是一个 …...

好用的四川企业用工风险咨询生产厂家

行业痛点分析在四川企业用工风险咨询领域,企业面临诸多技术挑战。首先,许多企业虽意识到用工风险的存在,但却不清楚风险具体所在。测试显示,超过七成企业未系统排查过自身用工风险,社保未足额缴纳、合同存在漏洞、规章…...

书匠策AI:论文写作小白也能一键“搞定“毕业论文?深度拆解这个AI神器到底有多香!

微信公众号搜一搜:书匠策AI | 官网直达:www.shujiangce.com 各位同学、各位在论文苦海里挣扎的"秃头星人"们,今天咱们来聊一个让我最近疯狂安利的东西——书匠策AI。 别急着划走,这不是广告,这…...

[特殊字符] 论文查重还在花钱?这个AI平台凭什么敢免费?一条给你讲透

各位正在跟论文死磕的朋友们,今天咱们不聊选题,不聊文献,聊一个每个毕业生都绑不开的刚需——查重。 你有没有算过一笔账?本科论文查一次少说三四十,硕士论文动辄上百,有些平台甚至标价两三百。一篇论文改…...

《软件工程实务》课程学习心得:从理论到实践的蜕变之旅

《软件工程实务》课程学习心得:从理论到实践的敏捷蜕变 关键词:软件工程、敏捷开发、Scrum、微服务、DevOps、Codeup、能源管理系统 可在该链接内学习相关内容: https://www.bilibili.com/ 一、写在前面 本学期我修读了《软件工程实务》课程&…...

书匠策AI:你的毕业论文“外挂“已上线,看完这篇你就懂了

各位同学们,我是你们的论文科普老朋友。 今天不讲格式、不讲开题报告怎么凑字数,咱们来聊一个能让你从"头秃"变成"头不秃"的神奇工具——书匠策AI。没错,就是那个官网 官网直达:www.shujiangce.com上让无数毕…...

射频PA中的ICC和ICQ电流是什么?

射频 PA 的 ICC 与 ICQ 深度解析 核心关联:ICQ(静态偏置)与 ICC(工作电流)直接决定 DLCA / ENDC / SRS / RX Desense 的系统稳定性。 一、拍板级定义:ICQ vs ICC 术语 全称 工作状态 核心关注点 ICQ Quiescent Current 静态(无信号或极小信号) 线性度、稳定性、瞬态响应…...

电源技术周览:从微生物电池到前沿功率器件深度解析

1. 电源技术周览:从微生物电池到前沿功率器件又到了每周梳理电源技术动态的时候。这周的信息密度不小,从颇具科幻感的微生物燃料电池,到未来十年锂离子电池的市场与技术路线图,再到高压直流输电和无线充电这些与我们生活、工业息息…...

图灵完备8051 第三天 累加器A和寄存器B

如果EN_B1,则写入新数据,否则保持原状。EN_B_OUT1,则输出,否则高阻态A也一样...

电子防盗扣用钢丝绳的抗拉强度与直径的关联规律

引言钢丝绳在现代工业领域中扮演着至关重要的角色。从大型机械设备到精细的电子防盗扣,钢丝绳凭借其独特的性能,保障着各类设备的稳定运行。在电子防盗扣的应用场景中,钢丝绳的抗拉强度直接关系到防盗扣的可靠性和安全性,而其直径…...

2026一氧化碳监测仪选型避坑指南:康高特等厂家深度对比评测

引言一氧化碳(CO),这种无色、无味、无刺激性的气体,因其与血红蛋白的极高亲和力,在工业生产、公共安全及环境监测领域构成了严峻的“隐形威胁”。随着全球工业化进程的加速和安全生产标准的日益提升,对一氧…...