尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

UVa 549 Evaluating an Equations Board

UVa 549 Evaluating an Equations Board
📅 发布时间:2026/6/20 14:16:07

题目描述

题目要求判断是否能够使用资源区中的部分或全部骰子,构造一个合法的数学表达式,使其结果等于目标数。表达式必须使用一位数(即000到999的数字),可以使用括号改变运算顺序,运算符为+++、−-−、×\times×。每个骰子上的符号只能使用一次。

输入格式

输入包含多组测试用例,每组两行:

  • 第一行:资源区的骰子符号(共131313个字符,由数字和运算符组成)。
  • 第二行:目标数(一位或两位数字,不含前导零)。
    输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每组测试用例,输出一行solution或no solution。

样例

输入

999999+++++ 54 0149++- 7+xx 56 0149++- 7+-- 56

输出

solution no solution

题目分析

本题的核心是搜索所有可能的表达式,判断是否存在一个等于目标数的表达式。

搜索策略

  • 将资源区的骰子分为数字和运算符两类。
  • 表达式是数字和运算符交替的序列,且以数字开头和结尾。运算符数量比数字数量少111。
  • 枚举所有可能的数字序列和运算符序列的组合,检查计算值是否等于目标数。
  • 由于数字和运算符数量有限,可以使用回溯法生成所有可能的表达式。

表达式求值

由于表达式不含括号,但题目说明可以使用括号,实际上运算符优先级需要处理。然而,在回溯法中,可以通过递归生成表达式树或使用逆波兰表达式(RPN\texttt{RPN}RPN)求值。参考代码使用栈模拟后缀表达式求值,但生成的是中缀表达式?实际上,表达式字符数组按顺序存放数字和运算符,然后使用栈计算时,未考虑运算符优先级,隐含了从左到右的顺序。这意味着它假设表达式是严格从左到右计算(即无优先级)。但题目允许使用括号改变顺序,因此需要更复杂的生成方式。

简化处理

参考代码通过枚举所有可能的数字和运算符排列,并假设表达式按顺序从左到右计算。这实际上对应于所有运算符优先级相同的情况,但题目允许括号,因此这种搜索可能遗漏解。然而,由于数字和运算符数量较少,且目标数不大,这种简化在本题中可能是可接受的。

复杂度分析

数字最多131313个,运算符最多666个,枚举所有排列可行。

代码实现

// Evaluating an Equations Board// UVa ID: 549// Verdict: Accepted// Submission Date: 2017-08-04// UVa Run Time: 0.010s//// 版权所有(C)2017,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intusedOperands[20],usedOperators[20],nGoal,exist,debug=0;string resource,goal,operands,operators;charexpression[20];intevaluate(intnChosen){stack<int>result;for(inti=0;i<nChosen;i++){if(isdigit(expression[i]))result.push(expression[i]-'0');else{inta=result.top();result.pop();intb=result.top();result.pop();switch(expression[i]){case'+':result.push(a+b);break;case'-':result.push(b-a);break;case'x':result.push(a*b);break;}}}returnresult.top();}voidbacktrack(intnChosen,intnOperands,intnOperators){if(exist)return;if(nOperands==1){if(debug){for(inti=0;i<nChosen;i++)cout<<expression[i];cout<<'\n';}if(evaluate(nChosen)==nGoal){exist=1;return;}}if(nOperators>=(nOperands-1)){for(inti=0;i<operands.length();i++){if(!usedOperands[i]&&operands[i]!=expression[nChosen]){usedOperands[i]=1;expression[nChosen]=operands[i];backtrack(nChosen+1,nOperands+1,nOperators);if(exist)return;usedOperands[i]=0;}}}if(nOperands>=2){for(inti=0;i<operators.length();i++){if(!usedOperators[i]&&operators[i]!=expression[nChosen]){usedOperators[i]=1;expression[nChosen]=operators[i];backtrack(nChosen+1,nOperands-1,nOperators-1);if(exist)return;usedOperators[i]=0;}}}}intmain(intargc,char*argv[]){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);intcases=0;while(cin>>resource>>goal){cases++;nGoal=stoi(goal);operands.clear(),operators.clear();sort(resource.begin(),resource.end());for(autoc:resource){if(isdigit(c))operands+=c;elseoperators+=c;}exist=0;memset(usedOperands,0,sizeof(usedOperands));memset(usedOperators,0,sizeof(usedOperators));memset(expression,0,sizeof(expression));backtrack(0,0,operators.size());cout<<(exist?"solution":"no solution")<<'\n';}return0;}

相关新闻

  • 在普通电脑上部署开源多模态大模型实操指南
  • 2026年GEO加盟贴牌为何成创业优选?爱搜索源头厂家深度解读 - 品牌报告
  • 2026太和装修,刚需房业主如何做到不超预算、不降品质——一位万达二号院业主的真实经历 - 装企自媒体训练营辉哥

最新新闻

  • 2026成都局改装修新模式:闭口合同如何解决增项痛点 - 优家闲谈
  • 【2026年6月亨得利官方正式采访对话辟谣】亨得利全国正规服务网点权威公示与消费者采访 - 亨得利官方维修中心
  • 2026 年亳州市厨卫屋顶防水修缮三家横向测评:吉修匠 99.8 分稳居榜首 - 吉修匠
  • 2026 年福州市厨卫屋顶防水修缮三家对比测评:吉修匠 99.8 分 - 吉修匠
  • CentOS 7 安装 JDK 8 为什么总出问题 很多人卡在环境变量这一步
  • 2025-2026 国内知名起名老师推荐 全国权威宝宝起名、改名名家盘点 - 速递信息

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号