信息学奥赛基础试题解析.pptVIP

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息学奥赛基础试题解析

试题解析 【试题1:分糖果】 【试题2:分糖果】 【试题3:小写字母转盘】 【试题:确定点位置】 【试题:约瑟夫环】 【试题:】 【试题:魔方阵】 【试题:购物(shopping.pas/c/cpp)】 【试题:迷宫求解】 【试题:合并果子】 堆栈 题1 括号匹配 算法: (1)遇到左括号进栈; (2)遇到右括号,弹出栈顶左括号,判断它和当前左括号是否匹配,如果不匹配即可结束,当字符串扫描完毕后,如果栈中还有左括号说明左括号多于右括号,不匹配。 堆栈 题2 表达式计算 算法1:直接计算中缀表达式; 实现:维护优先级表(重点);维护运算符号栈和数字栈或者变量符号栈; 遇到运算符,如果当前运算符优先级高于栈顶算符优先级,则当前优先级进栈,否则弹出算符栈顶算符,弹出数字栈顶2个元素或1个元素进行运算。运算结果压入数字栈,依次操作,直到栈空。 算法2:先转成后缀表达式,然后计算后缀式; 队列 应用 广搜 最短路spfa 单调队列 队列 题1 M集合的最小N个产生数 M集合元素满足条件: 初始元素为x; 2*x+1同样属于M,3*x+1也属于M. 求m中最小的前n个数。 解析 算法: 维持两个队列,一个产生2*x+1,一个产生3*x+1 找出两个队头最小的数进行生成新数,然后将找到的最小的数出队,加入目的数组。重复同样的方法直到产生出N个数为止。 队列 题2 合并果子 贪心法,按最优二叉树方法,每次找两个最小堆合并 但是要不断更新单调序列,数据大时会超时,效率低。 堆法; 单调队列法; 单调队列法 维持两个 t 1 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 购买方案 物品编号 已经花费 6 5 4 3 2 1 价格 MAX 物品 5 6 5 4 3 2 1 -1~0 2 s k t 在已花1元基础上从2物品开始尝试,会得到最后一种购物方案(1,4),最终退回到物品1! t 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 购买方案 物品编号 已经花费 6 5 4 3 2 1 价格 MAX 物品 5 6 5 4 3 2 1 1 1 s k t 物品1尝试完毕,回溯,t=0,全过程结束! 【可以输出情况】 1、输出可行路径总数; 2、输出最短路径及其长度; 3、只有一条路径,输出之; 0 0 0 1 0 1 0 1 0 0 0 0 1 1 1 0 求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用“栈”也就是自然而然的事了。 假设迷宫如下图所示: 假设“当前位置”指的是“在搜索过程中某一 时刻所在图中某个方块位置”,则求迷宫中一条路 径的算法的基本思想是:若当前位置可通,则纳 入当前路径,并继续朝“下一位置”探索,即切 换“下一位置”为“当前位置”,如此重复直至到 达出口;若当前位置“不可通”,则应顺着“来向” 退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周四个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是“当前位置”四周四个方向(东、南、西、北)上相邻的方块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。 K←0; t←1; b[1,1]←1; b[1,2]←1; pass[1,1]←1; flag←false; k ← k+1;{尝试下一条规则} x ← b[t,1]+d[1,k]; y ← b[t,2]+d[2,k];{试走一步} 可通否? true false t ← t+1; b[t,1] ← x; 到达终点? true false flag←true; 计数(或打印); k ←0;{继续下一步} While (k4) and not flag do pass[b[t,1],b[t,2]]←0; t←t-1; k←b[t,3](t0时); flag←false; {回溯} Until t=0; b[t,2] ← y; pass[x,y]←1; b[t,3]← k; 设定当前位置的初值为入口位置; do{ 若当前位置可通, 则{ 将当前位置插入栈顶; // 纳入路径 若 该位置是出口位置,则结束; // 求得路径存放在栈中 否则切换当前位置的

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档