版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、骗分导论关于应付竞赛不会难题的策略大牛是稀有的,每道题都会的大牛更少。相信想我这样的人还是挺多的,那竞赛时遇到不会的难题怎么办呢?放弃?让100 分就这样流去?当然不能放弃。【1】遇到难题时心态要稳定,先搞定简单的题目,最后思考难题。心态是第一位。【2】如果难题实在不能解决也不能放弃,虽然写不出完美的算法,但可以用象贪心,搜索之类的算法,虽然不能Ac 但一般能过几个,有分总比没分好。举个例子穿越磁场(cross)探险机器人在Samuel 星球上寻找一块奇特的矿石,然而此时它陷入了一片神秘的磁场区域,动弹不得。探险空间站立刻扫描了这片区域,绘制出该区域的磁场分布平面图。这片区域中分布了N 个磁场
2、,每个磁场呈正方形,且边与坐标轴平行。例如下图中,存在3 个磁场,白点表示机器人的位置,黑点表示矿石的位置:科学家们分析平面图,进一步发现:这些磁场为大小不一的正方形,可能相交,甚至覆盖,但是它们的边缘不会重合,顶点也不会重合。例如下面的两种情形是不会出现的:科学家们给探险机器人启动了磁力罩,这样它就可以在磁场中自由穿越了。初始时,探险机器人和所有矿石都不在任何磁场的边缘。由于技术限制,XYO在穿越过程中机器人只能够水平或垂直移动,且不能够沿着磁场的边缘行动。由于磁力罩的能量有限,科学家们希望探险机器人穿越尽量少的磁场边缘采集到这块矿石。例如上图中,探险机器人最少需要穿越两次磁场边缘。现在小联
3、请你编写程序,帮助科学家们设计探险机器人的路线,统计探险机器人最少需要穿越多少次磁场边缘。输入(cROSS.IN):第一行有一个整数N,表示有N 个磁场(1 N 100)。随后有N 行,每行有三个整数X、Y、C(0 X ,Y ,c 10000),表示一个磁场左下角坐标为(X,Y),边长为c。接下来有一行,共有四个整数SX, SY, TX,TY,表示机器人初始坐标为(SX, SY),矿石坐标为(TX,TY)(其中,0 S X,SY, TX, TY 10000)。输出(cROSS.OUT):单行输出一个整数,表示机器人最少需要穿越多少次磁场边缘。样例:输入:213 32 1 40 0 3 4输出:
4、2当时我做这道题时很茫然,一点思路都没有。但我认为如果机器人和矿一个在磁场外面,一个在里面就一定要穿越一次。如果都在里面或外面那就不穿越。但有特殊情况,虽然想到了,但无法处理,所以我就用我错误的想法编了一个。特殊情况:如果时这样用我的算法算出来就是0,但实际上是2。我的程序主要代码如下for i:=1 to n doif (sxmapi,1)and (symapi,2)xor (txmapi,1) and (tymapi,2)then inc(total)很短,但数据太弱了,没有一个有如上可能。所以我全过了这样是很划算的,如果当时放弃就一分都没有了。附标准算法(2006 全国冬令营汪晔):(有
5、点复杂,当时我绝对想不出来。) 问题分析:方法1:将坐标中的所有整点坐标当作顶点,在每个点与坐标系中相邻的点间加一条无向边,如果穿过磁场,边的权值为1,否则权值为0。求机器人从起点到终点的最小耗费,也就是求构造的图中两点之间的最短路径,我们可以用Dijkstra 解决。每次循环中寻找最大值的复杂度为O(V),改进相邻点时由于要判断是否穿过磁场边,所以复杂度为O(N)。整个算法复杂度为就是O(VN+V2),这里V=整个坐标中的点的个数=10000*10000,显然超时。当然,在实现过程中我们可以有所优化,比如确定查找点的范围。 方法2:Dijkstra 分为两大部分,第一部分是取所有未标记点中的
6、最小值,第二部分是用当前最小值改进整个图。那么建立一个上小下大的堆,堆中保存所有起始点到图中未标记的点的最0 0 01 0 10 0 01 0 1000101101000O xy0 00 0 001 1101 1 11 100000 0 0 0 000 0 0 00101 12 2短路径值,这样每次取出一个最小值的复杂度为O(1);由于此图中,每个点的度最多为4,查找边的权值的复杂度为O(N),更新堆的复杂度为O(Vlog2V)。因而算法复杂度降为O(V+NV+Vlog2V)。但由于V=10000*10000 仍不能在时限中出解。方法3:此题的数据规模有一些特性虽然坐标系的范围巨大,但有效坐标
7、(机器人的坐标,宝藏的坐标和磁场顶点坐标)的个数却很小。上两个方法的主要复杂度都取决于V,也就是坐标系中的点数。如果我们可以把坐标系的范围缩小,也就相当于把V 缩小,就可以大大降低问题的时间复杂度。在上种方法的构图中,我们会发现很多边的权值为0,也就是说,可能有很多连续点的最短路径值都相等。如图:那么我们将整个图中有效坐标抽出,建立一个新的坐标系,这个坐标系中相邻两个个坐标的间距为单位“1”,但此时单位长度的意义为有效坐标的序号。如图:这样我们依然用最短路径的方法在这个图中进行操作, 算法复杂度为O(V+VN+Vlog2V),但此时,V=204*204,问题得以解决。方法4:离散化后对整个图中
8、的连续无磁场部分进行染色,如下图:问题就是求机器人所在点的颜色区域到宝藏所在点的颜色区域的最短路径。由于每相邻两个区域间的边的权值均为1,所以算法复杂度为O(V)。因而整个算法的复杂度为O(NV)。这里的N=100,V=204*204。如果先构图,复杂度为O(N ),再染色用宽搜求最短路复杂度为O(V),V 所以总复杂O xy0 00 0 000 0000 0 00 000000 0 0 0 000 0 0 00000 0 00 0 0度为O(N +V V)。【3】如果太难了,连一点思路都没有可以考虑只输出一个值,如果对了也有10 分。但这个值也不能乱输出,也要有一定的依据,输样例的成功率太小
9、了(nOIp2004 除外)如果题目要求误解输出No之类的,输出这个肯定有分。如nOIp2005 第三题,输出1有10 分。千万不要小看这10 分,当时一等才130,很多人120郁闷了吧要输出可能性最大的,骗要骗得精彩。如果天上能掉下来馅儿饼,那我就不用再学习了,天上能掉馅儿饼么?不能,所以我还得学习;如果天上能掉下来林妹妹,那我就不愁女友了,天上能掉林妹妹么?不能,所以我还得愁女友;如果天上能掉恐龙,那我就要时刻做好逃命的准备,天上能掉恐龙么?不能,所以我不用时刻做好逃命的准备;如果cheat 能过很多数据是一种错,那我宁愿一错再错,cheat 能过很多数据么?可以,所以,是的,我宁愿一错再
10、错重建道路(roads)【问题描述】一场可怕的地震后,人们用N 个牲口棚(1N150编号1.N)重建了农夫John 的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树,John 想要知道另一次地震会造成多严重的破坏。有些道路一旦被毁坏,就会使一棵含有P(1PN)个牲口棚的子树和剩余的牲口棚分离,John 想知道这些道路的最小数目。【输入】第1 行:2 个整数,N 和P第2N 行:每行2 个整数I 和J,表示节点I 是节点J 的父节。【输出】单独一行,包含一旦被破坏将分离出恰含P 个节点的子树的道路的最小数目。【样例输出
11、】11 6 2l 2l 3l 41 52 62 72 84 94 104 11【样例解释】如果道路14 和15 被破坏,含有节点(12,3,6,7,8)的子树将被分离出来。这道题也不是什么难题,但当时我就不知道怎么做。我用了垃圾的搜索,效率很低很低。为了检测我写的搜索是否正确,我随机生成了很多小数据(大的严重超时),一测发现结果怎么这么多2?难道2 的机率这么大?不管这么多了,反正我也想输样例了(样例也是2),于是心一恨写下了如下代码writeln(2)吃惊的是我的成绩,80 分啊(数据太弱了)附标准算法:用树型动态规划求解。定义f(n, m)为在n 为根的子树中取m 个节点的最小代价,则状态
12、转移方程为:f(n, m)=minf(n0, m0)+f(n1, m1)+f(n2, m2)+f(nk, mk)其中,n0, n1, n2, , nk 为n 的k 个儿子,m0+m1+m2+mk=m,并且定义f(ni, 0)=1。最后的结果为:minf(root, p), minf(n, p) | nroot看来writeln(2)的性价比还是挺高的【4】简单数学分析猜测座位的争执描述Description文件名complain.pas;还记得Matrix67 的“非常男女”计划吗?由Matrix67 策划的学校大型男女配对活动将在大礼堂隆重举行,学校里许多人即将前来捧场。大礼堂一共有n 个座
13、位,为了方便管理,Matrix67 对它们从1 到n 顺序编号。售票工作已经完成,经统计,共有k 个人拿到了入场券。由于kn,因此大礼堂的座位完全足够。每张入场券上都印有座位号,入场者凭入场券对号入座。在这k 个人即将陆续入场时,Matrix67 发现了一个严重的错误:由于在入场券的销售过程中搞错了大礼堂总的座位数,入场券上印的座位号只有1 到t。虽然这t 个座位号中的每一个都在入场券中至少出现了一次,但有一个事实不能改变:tkt。第二行有k 个用空格隔开的正整数。这些正整数保证不超过t,且所有不超过t 的种类数。第二行包含n 个整数,用空格分隔,第i 个整数ai(1 = ai = 20000
14、)是第i 种果子的数目。【输出文件】输出文件fruit.out 包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。【样例输入】31 2 9【样例输出】15【数据规模】对于30%的数据,保证有n = 1000;对于50%的数据,保证有n = 5000;对于全部的数据,保证有n = 10000。分析:这道题数据规模太大,不好cheat,所以直接输出样例。得10 分。3、合唱队形(nOIp2004_p3)pp)【问题描述】N 位同学站成一排,音乐老师要请其中的(NK)位同学出列,使得剩下的K 位同学排成合唱队形。合唱队形是指这样的一种队形:设K 位同学从左到右依次
15、编号为1, 2, , K,他们的身高分别为T1, T2, , TK,则他们的身高满足T1 T2 Ti+1 TK (1 = i = K)。你的任务是,已知所有N 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。【输入文件】输入文件chorus.in 的第一行是一个整数N(2 = N = 100),表示同学的总数。第一行有n 个整数,用空格分隔,第i 个整数Ti(130 = Ti = 230)是第i 位同学的身高(厘米)。【输出文件】输出文件chorus.out 包括一行,这一行只包含一个整数,就是最少需要几位同学出列。【样例输入】8186 186 150 200 160
16、130 197 220【样例输出】4【数据规模】对于50%的数据,保证有n = 20;对于全部的数据,保证有n = 100。分析:对于dp 还没有入门得同学对这道题可以采用分析特殊数据样例法if (n=8) and (a7=197) then writeln (4)else beginfor i:=1 to n1do beginif k and (anan+1) then continueelse l:=falseif (not k) and (not l) breakendif k or l then writeln (0)else writeln (n div 2)end得30 分4、虫食
17、算(nOIp2004p4)(alpha.pas/c/cpp)【问题描述】所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母。来看一个简单的例子:43#98650#45+ 8468#663344445506978其中#号代表被虫子啃掉的数字。根据算式,我们很容易判断:第一行的两个数字分别是5 和3,第二行的数字是5。现在,我们对问题做两个限制:首先,我们只考虑加法的虫食算。这里的加法是N 进制加法,算式中三个数都有N 位,允许有前导的0。其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的。我们将相同的数字用相同的字母表示,不同的数字用不同的字母表示。
18、如果这个算式是N 进制的,我们就取英文字母表中的前N 个大写字母来表示这个算式中的0 到N1这N 个不同的数字(但是这N个字母并不一定顺序地代表0 到N1)。输入数据保证N 个字母分别至少出现一次。BADc+ cBDADCCc上面的算式是一个4 进制的算式。很显然,我们只要让ABcD 分别代表0123,便可以让这个式子成立了。你的任务是,对于给定的N 进制加法算式,求出N 个不同的字母分别代表的数字,使得该加法算式成立。输入数据保证有且仅有一组解。【输入文件】输入文件alpha.in 包含4 行。第一行有一个正整数N(N = 26),后面的3 行每行有一个由大写字母组成的字符串,分别代表两个加
19、数以及和。这3 个字符串左右两端都没有空格,从高位到低位,并且恰好有N 位。【输出文件】输出文件alpha.out 包含一行。在这一行中,应当包含唯一的那组解。解是这样表示的:输出N 个数字,分别表示A,B,c所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格。【样例输入】5ABcEDBDAcEEBBAA【样例输出】1 0 3 4 2【数据规模】对于30%的数据,保证有N = 10;对于50%的数据,保证有N = 15;对于全部的数据,保证有N =money) thenbegink:=ibreakendend然后排序一次输出Procedure Printvar t:qwordbegi
20、nwriteln(k)t:=0for i:=1 to k1dobeginp:=finc(t,f)endpk:=moneytsortfor i:=1 to k dowrite(p,)close(output)end这样做简单,快捷,方便。最终由于数据弱得了80 分。6、切割矩形(incise.pas)题目描述把一个a*b 矩形切割成尽量少的正方形。每次可以选择一个矩形,沿着水平或者垂直线把它切成两部分(不能转弯)。两个整数a, b(1=a,b=100)最少的正方形个数样例输入5 6样例输出5分析:一看就是dp,可是当时我怎么也没有想出来,于是用贪心做。每次在较长边上切去次长边。虽然这样连样例都过
21、不了。但还是得30 分。6、费解的开关(Matrix67 第一次模拟赛系列)描述Description你玩过“拉灯”游戏吗?25 盏灯排成一个5x5 的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种状态1011101101101111000011011在改变了最左上角的灯的状态后将变成:0111111101101111000011011再改变它正中间的灯后状态将变成:0111111001110011010011011给定一些游戏的初始状态,编写程序判断游戏者是否可能在6 步以内使所有的灯都变亮。输入格式Input Format第一行有一个正整数n,代表数据中共有n 个待解决的游戏初始状态。以下若干行数据分为n 组,每组数据有5 行,每行5 个字符。每组数据描述了一个游戏的初始状态。各组数据间用一个空
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 徐州医科大学《经济学基础》2025-2026学年期末试卷
- 上海工商外国语职业学院《当代西方经济学流派》2025-2026学年期末试卷
- 上海科创职业技术学院《社会政策学》2025-2026学年期末试卷
- 内蒙古商贸职业学院《卫生保健》2025-2026学年期末试卷
- 苏州科技大学天平学院《刑事诉讼法》2025-2026学年期末试卷
- 上海兴伟学院《蛋白质与酶工程》2025-2026学年期末试卷
- 沈阳农业大学《电工学原理与应用》2025-2026学年期末试卷
- 上海科创职业技术学院《政策与法律法规》2025-2026学年期末试卷
- 上海工程技术大学《税法》2025-2026学年期末试卷
- 上海第二工业大学《服务管理》2025-2026学年期末试卷
- 可用性控制程序
- 9.3 LLDPE物质安全资料表-2
- 嗜铬细胞瘤(赵耀武)-课件
- 60万吨年甲醇项目甲醇主装置土建安装工程技术标书
- 当前大学生就业形势与政策
- 焊材(焊丝、焊条)用量自动计算
- 面向地震灾害的福州市应急避难场所适宜性评价及布局优化
- GB/T 25123.2-2018电力牵引轨道机车车辆和公路车辆用旋转电机第2部分:电子变流器供电的交流电动机
- GB/T 21358-2008喷气燃料过滤分离器通用技术规范
- GA 1149-2014细水雾灭火装置
- 统编版二年级下册读书吧必读书《绿野仙踪》导读、阅读检测【含答案】
评论
0/150
提交评论