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

UVa 189 Pascal Program Lengths

题目分析本题要求计算Turbo Pascal\texttt{Turbo Pascal}Turbo Pascal程序的长度长度由若干类token\texttt{token}token的数量决定包括保留字reserved words\texttt{reserved words}reserved words标识符identifiers\texttt{identifiers}identifiers常量constants\texttt{constants}constants左括号(和左方括号[运算符、-、*、/、、、、、、、、^、:需要特别注意的是注释使用{}界定不嵌套注释内容完全忽略。字符串常量使用单引号界定字符串中的表示一个单引号字符。数字常量包括整数、实数、科学计数法形式以及十六进制常量以$开头。标识符以字母或下划线_开头后跟字母、数字或下划线。子范围lower..upper形式中的..不是单独 token而是两个.字符但.不在计数范围内。和-尽可能视为运算符例如x : -3中的-是运算符。解题思路本题的核心是对Pascal\texttt{Pascal}Pascal源代码进行一次扫描识别出所有需要计数的token\texttt{token}token同时忽略注释、字符串内容等其他字符。一种可行的策略是多阶段扫描预处理将全部代码合并为一个字符串并转换为小写便于后续匹配保留字和标识符。移除注释扫描字符串将{到}之间的内容替换为空格。处理字符串常量扫描字符串将到之间的内容替换为空格同时注意转义。遇到字符串常量时需要为字符串本身计数111次字符串常量属于常量的一种。计数括号和方括号扫描字符串遇到(或[则计数器加111将这些字符替换为空格。计数标识符和保留字在begin之前的部分扫描标识符因为变量声明只出现在begin之前记录去重后的标识符列表然后在全文中计数这些标识符的每次出现。计数数字常量扫描字符串识别十六进制、整数、实数、科学计数法形式的数字常量每次识别一个常量则计数器加111。计数运算符依次匹配题目中给出的所有运算符每次匹配成功则计数器加111。处理剩余标识符扫描剩余字符串识别可能遗漏的标识符例如保留字并计数。最终输出格式为Program by 姓名 contains 数量 units.代码实现// Pascal Program Lengths// UVa ID: 189// Verdict: Accepted// Submission Date: 2016-04-05// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;// 存储整个程序的源代码string program;// 需要计数的运算符列表按长度从长到短排列便于匹配string operators[13]{,,,:,,^,,-,*,/,,,,};// 计算程序长度单位数intcount(){intcounter0;// 统一转换为小写便于后续匹配for(inti0;iprogram.length();i)if(isalpha(program[i]))program[i]tolower(program[i]);// 第一阶段处理注释 {} 和字符串常量intindex0;while(indexprogram.length()){// 处理注释if(program[index]{){program[index] ;while(indexprogram.length()){charcurrentprogram[index];program[index] ;if(current})break;index;}}// 处理字符串常量elseif(program[index]\){counter;// 字符串常量作为一个 token 计数program[index] ;while(indexprogram.length()){if(program[index]\){// 两个连续单引号表示一个单引号字符属于字符串内容if(program[index1]\){program[index] ;program[index1] ;index2;}else{program[index] ;break;// 字符串结束}}elseprogram[index] ;}}index;}// 第二阶段计数左括号和左方括号右括号和右方括号忽略index0;while(indexprogram.length()){if(program[index](||program[index][){counter;program[index] ;}elseif(program[index])||program[index]]){program[index] ;}index;}// 第三阶段在 BEGIN 之前收集标识符变量名、类型名等index0;intlastprogram.find(begin);if(lastprogram.npos)lastprogram.length();// 如果没有 begin则扫描整个程序vectorstringvariables;while(indexlast){// 标识符字母或下划线开头if(isalpha(program[index])||program[index]_){string block;blockprogram[index];counter;// 每个标识符计数一次program[index] ;while(indexlast)if(isalpha(program[index])||isdigit(program[index])||program[index]_){blockprogram[index];program[index] ;}elsebreak;variables.push_back(block);}index;}// 第四阶段在全文中查找这些标识符的每次出现并计数index0;while(indexvariables.size()){intnextprogram.find(variables[index]);while(next!program.npos){// 检查是否为独立单词边界不是字母、数字、下划线if(isalpha(program[next-1])falseisdigit(program[next-1])falseprogram[next-1]!_isalpha(program[nextvariables[index].length()])falseisdigit(program[nextvariables[index].length()])falseprogram[nextvariables[index].length()]!_){counter;for(inti0;ivariables[index].length();i)program[nexti] ;}nextvariables[index].length();nextprogram.find(variables[index],next);}index;}// 第五阶段处理数字常量index0;while(indexprogram.length()){// 十六进制常量以 $ 开头if(program[index]$){counter;program[index] ;while(indexprogram.length()){charcurrentprogram[index];if(isdigit(current)||(currentacurrentf))program[index] ;elsebreak;}}// 十进制数字常量整数、实数、科学计数法elseif(isdigit(program[index])){counter;program[index] ;// 整数部分while(indexprogram.length())if(isdigit(program[index]))program[index] ;elsebreak;// 小数部分可选if(indexprogram.length()program[index].){program[index] ;while(indexprogram.length())if(isdigit(program[index]))program[index] ;elsebreak;}// 指数部分可选if(indexprogram.length()program[index]e){program[index] ;if(program[index]||program[index]-)program[index] ;while(indexprogram.length()isdigit(program[index]))program[index] ;}}index;}// 第六阶段处理运算符for(inti0;i13;i){intstart0;intnextprogram.find(operators[i],start);while(next!program.npos){counter;for(intj0;joperators[i].length();j)program[nextj] ;startnextoperators[i].length();nextprogram.find(operators[i],start);}}// 第七阶段处理剩余的标识符如保留字index0;while(indexprogram.length()){if(isalpha(program[index])||program[index]_){counter;program[index] ;while(indexprogram.length())if(isalpha(program[index])||isdigit(program[index])||program[index]_)program[index] ;elsebreak;}index;}returncounter;}// 输出结果voidoutput(string name){intunitscount();coutProgram by name contains units units.\n;}intmain(){string line;while(getline(cin,line)){string firstTwoColumnsline.substr(0,2);// 遇到 ~~ 表示程序结束输出结果并清空if(firstTwoColumns~~){output(line.substr(2));program.clear();}else{// 将每行代码拼接用空格分隔保证 token 边界正确programline;program ;}}return0;}

相关文章:

UVa 189 Pascal Program Lengths

题目分析 本题要求计算 Turbo Pascal\texttt{Turbo Pascal}Turbo Pascal 程序的长度,长度由若干类 token\texttt{token}token 的数量决定,包括: 保留字(reserved words\texttt{reserved words}reserved words)标识符&a…...

AI高通量实验平台:数据驱动电池级碳酸锂工艺优化

1. 项目概述:当AI遇见“白色石油”的提纯革命电池级碳酸锂,这个被誉为“白色石油”的关键材料,其生产工艺的每一次微小优化,都牵动着整个新能源产业链的神经。传统的工艺优化,往往依赖于工程师的经验和“试错法”&…...

CANN ops-tensor Blaze引擎

Blaze 【免费下载链接】ops-tensor ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。 项目地址: https://gitcode.com/cann/ops-…...

UVa 188 Perfect Hash

题目分析 本题要求为给定的单词列表构造一个完美哈希函数,函数形式为: ⌊Cw⌋ mod n \left\lfloor \frac{C}{w} \right\rfloor \bmod n ⌊wC​⌋modn 其中: www 是单词转换后的整数值(转换规则:每个字母用 555 位表示…...

长期使用中观察到的Taotoken账单明细与成本分析价值

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用中观察到的Taotoken账单明细与成本分析价值 在将大模型能力集成到产品或研发流程的长期实践中,一个清晰、可追…...

联邦学习与Transformer在CV与安全领域的融合应用与实战解析

1. 项目概述:当联邦学习遇上Transformer,CV与安全的新范式最近几年,我身边不少做计算机视觉(CV)和网络安全的朋友,都在不约而同地讨论两个词:联邦学习(Federated Learning&#xff0…...

信贷风控中可解释AutoML实践:用SHAP与H2O实现透明AI决策

1. 项目概述:当信贷决策遇上“透明”的AI在金融科技圈子里干了十几年,我亲眼见证了机器学习从实验室里的新奇玩具,变成信贷风控部门里不可或缺的“主力队员”。无论是银行、消费金融公司还是新兴的金融科技平台,都在用算法模型来评…...

基于SVR与特征选择的系外行星半径预测:数据清洗、模型构建与天文解读

1. 项目概述:从数据到洞察,预测遥远世界的尺寸在系外行星研究的浩瀚星海中,我们获取的数据往往是间接且充满噪声的。当一颗行星从它的母恒星前方经过,我们称之为“凌星”,望远镜会记录下恒星亮度的微小下降。从这些“光…...

不同价位的燕窝品质差异大吗?行业标准解读与选购建议

不同价位的燕窝品质差异大吗?答案是确实存在较为明显的客观差异,价格落差主要对应原料等级、加工工艺、安全溯源三个核心维度的区别,合理的价格差对应品质差,但也存在部分营销溢价,消费者需要学会区分核心指标。不同价…...

第五篇:锻造大脑——为什么算法公开,你却造不出 GPT?

书接上文。同学问:“既然 CNN、Transformer 的论文和代码都是开源的,我能不能在寝室里手搓一个 DeepSeek 或者 GPT-4?” 这就像虽然米其林餐厅的菜谱(算法)是公开的,但要把菜做成艺术品,你还需要…...

非洲AI本土化实践:医疗、农业、金融、教育四大领域创新与挑战

1. 非洲AI发展的现实图景:机遇与挑战并存 谈论人工智能,我们常常将目光聚焦在硅谷、北京或伦敦。但如果你把视线转向非洲大陆,会发现一片截然不同却又充满生机的AI创新土壤。这里没有OpenAI或DeepMind那样的科技巨头,却有着一群直…...

基于主动学习的广义Benders分解算法初始化优化研究

1. 项目概述:当优化算法遇上“主动学习”在运筹优化和工业工程领域,我们常常需要面对一类“硬骨头”问题:大规模、混合整数、带有复杂约束的优化模型。这类问题大到供应链网络设计,小到芯片布局布线,其核心挑战在于&am…...

CANN/tensorflow NPURunConfig精度调优配置

精度调优 【免费下载链接】tensorflow Ascend TensorFlow Adapter 项目地址: https://gitcode.com/cann/tensorflow precision_mode_v2 算子精度模式,配置要求为string类型。 fp16:表示原图中算子精度为float16、bfloat16或float32时&#xff0c…...

CANN/cann-recipes-infer:NPU DeepSeek-V4 TileLang算子开发实践

NPU DeepSeek-V4 TileLang算子开发实践 【免费下载链接】cann-recipes-infer 本项目针对LLM与多模态模型推理业务中的典型模型、加速算法,提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-infer 简介 在大模型异构计算发展背景…...

CANN/pyasc ib_wait函数文档

asc.language.basic.ib_wait 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.basic.ib_wait(g…...

昇腾SiP CgemvOperation C++示例

信号处理加速库CgemvOperation C Demo 【免费下载链接】sip 本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。 项目地址: https://gitcode.com/cann/sip 介绍 该目录下为信号处…...

智能电网安全:基于可信AI的攻击检测与风险解释框架

1. 项目概述在智能电网这个庞大的能源神经系统中,分布式能源资源(DERs)——比如你家屋顶的光伏板、街角的电动汽车充电桩、甚至是一个社区的储能电站——正以前所未有的速度和规模接入。它们通过源源不断的控制与状态消息,与电网控…...

CANN Runtime异常处理指南

异常处理 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 获取Runtime错误码 所有Runtime接口都会返回一个错误码。然而,对于异步接口(参见异步任务执行)&#xff0…...

KrkrzExtract终极指南:新一代krkrz引擎资源解包工具完全解析

KrkrzExtract终极指南:新一代krkrz引擎资源解包工具完全解析 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract是专门为krkrz引擎设计的下一代资源处理工具&#x…...

别再死记硬背TP/FP了!用Python手把手带你画混淆矩阵,5分钟搞懂准确率、召回率

用Python实战拆解分类模型评估:从混淆矩阵到指标可视化 刚接触机器学习的开发者常会遇到这样的困惑:为什么模型预测的"准确率"很高,但实际业务中却表现糟糕?上周我帮一个电商团队分析用户流失预测模型时就遇到这种情况—…...

多模态大模型如何重塑科学教育:从理论框架到课堂实践

1. 项目概述:当科学教育遇见“多模态”大脑最近几年,我身边不少从事科学教育(从K12到大学)的朋友和同事,都在不约而同地讨论一个词:多模态大语言模型。起初,大家只是把它当作一个更聪明的聊天机…...

视频动作识别可解释性:REVEX框架与六种移除式解释方法评测

1. 项目概述:当AI“看”视频时,我们如何理解它的“思考”?在动作识别领域,AI模型已经能够以惊人的准确率识别视频中的人类行为,从简单的“走路”、“跑步”到复杂的“打篮球”、“弹钢琴”。然而,一个长期困…...

2026年,如何挑选靠谱的冷镦油过滤机生产商?这几点是关键

在紧固件、轴承等金属零部件制造领域,冷镦工艺是核心环节,而冷镦油的清洁度直接关系到模具寿命、产品精度与生产成本。随着2026年工业制造向智能化、绿色化深度转型,选择一台高效、可靠的冷镦油过滤机,已成为企业降本增效与合规运…...

CANN/hcomm AIV算子任务编排

任务编排 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 编排步骤 参与集合通信的各个rank协调有序地进行同步与数据搬运&am…...

别再手动改NetCDF了!用CDO批量插值气象数据的保姆级Shell脚本(附双线性/最近邻/样条等7种方法对比)

别再手动改NetCDF了!用CDO批量插值气象数据的保姆级Shell脚本(附双线性/最近邻/样条等7种方法对比) 气象数据处理中,最让人头疼的莫过于面对不同来源、不同分辨率的NetCDF文件。想象一下,你手头有几百个温度、降水或风…...

深度解析KrkrzExtract:下一代krkrz引擎资源处理工具实战指南

深度解析KrkrzExtract:下一代krkrz引擎资源处理工具实战指南 【免费下载链接】KrkrzExtract The next generation of KrkrExtract 项目地址: https://gitcode.com/gh_mirrors/kr/KrkrzExtract KrkrzExtract作为新一代krkrz引擎资源处理工具,专为游…...

CANN/ops-nn GeluMul算子

GeluMul 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√At…...

APA 7th Edition终极指南:三分钟解决Word参考文献格式混乱问题

APA 7th Edition终极指南:三分钟解决Word参考文献格式混乱问题 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为学术论文的参考文献格…...

中国企业全球化人才战略白皮书

导读:当前中国企业全球化已进入深水区,告别 “拼速度、抢扩张” 的粗放阶段,转向以长期价值、组织韧性、全球共生为核心的新征程。效率、成本与技术速度不再是决胜关键,信任力成为企业立足全球、穿越周期的核心 “软货币”&#x…...

CANN/HCOMM对称内存注册接口

HcclCommSymWinRegister 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT&#xff1…...