首页 >> 甄选问答 >

noip2010普及组(noip2010)

2022-09-01 11:44:13

问题描述:

noip2010普及组(noip2010),这个问题到底啥解法?求帮忙!

最佳答案

推荐答案

2022-09-01 11:44:13

大家好,小金来为大家解答以上的问题。noip2010普及组,noip2010这个很多人还不知道,现在让我们一起来看看吧!

1、不好意思啦,你没说清楚是提高还是普及,然后我也有点急,就随便拉了个解题报告。

2、三、导弹拦截再次见到导弹拦截,颇感亲切,但是这次的导弹拦截,加入了立体环节,也从借用原题概念,让一个不存在的动态规划方法,影响解题思路。

3、其实,题目的核心解题思想还是贪心和枚举。

4、只不过要枚举的有些策略而已。

5、我也曾试过了,用单位长度去枚举两个点的半径,结果残酷的只过了两个点。

6、还是经过学生的解释,明白了排序后的贪心策略。

7、所以,向学生学习,也是老师的必修课程。

8、我再次强调,我经常向学生学习,教学相长,不外乎如此。

9、所以,希望更多的老师,能够时常放下自己的架子和身份,多多向学生请教,我们共同的成长。

10、按照到第一个点的距离平方排序之后,就可以不断让最远的点,不用离开第一点半径,进入第二点半径。

11、在这个过程中,第一点半径逐渐缩小,第二点半径,可能发生增大。

12、就需要一步步统计出,两个半径平方的最小值。

13、最终达到题目要求。

14、因为考虑到点的数量是100000,所以,无比需要使用快速排序。

15、题目如果想写的较为简洁,还是使用结构体比较方便。

16、首先定义一个结构体,包括x,y,jr1(距离第1点半径平方),jr2(距离第2点半径平方)。

17、struct dian{ int x; int y; int j1r; int j2r;}d[100050];这里面顺便定义了一个10万数量级的数组。

18、快速排序的函数:void qsort(int s, int e){ dian t; int l, r; if (s >= e) return ; l = s; r = e; t = d[s]; while (l < r) { while (l < r && d[r].j1r >= t.j1r) r--; d[l] = d[r]; while (l < r && d[l].j1r <= t.j1r) l++; d[r] = d[l]; } d[r] = t; qsort(s, r - 1); qsort(r + 1, e);}然后就是逐渐退出和更新半径的过程了:r = d[n].j1r; m2 = 0; for (i = n ; i >= 1 ; i--) { if (d[i].j2r > m2) m2 = d[i].j2r; tr = d[i - 1].j1r + m2; if ( r > tr ) r = tr; }最后r即为最小消耗。

19、以上是 王祺磊 的结题报告。

20、如您愿意给我(王祺磊)发邮件,欢迎发邮件至:fatship@163.com与我交流。

21、呵呵,又是老班啊!我是刘盛超,选我为答案吧。

22、发表下看法:我也是选的寄存器,似乎记得小学里的老师讲过的... ...这个貌似有点难。

本文到此分享完毕,希望对大家有所帮助。

  免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。

 
分享:
最新文章