题外话:这一年的noip应该是最受大众关心的,以至于在百度上输入noip第三个关键字就是noip2007。主要是由于这篇文章:http://www.zhihu.com/question/21107274/answer/18452037

 

第一题:统计数字

排序/平衡二叉树

受上面这篇文章的影响,我没有用快排,而是用了STL的multiset的count函数来统计出现次数。但事实证明STL的sort足以应付此题。另外的解法是用Treap实现的名次树,效率不及sort但高于multiset。

 

第二题:字符串的展开

模拟

虽然是模拟题但是可惜没有1次AC。原因出在我没有考虑到连续的两个展开,比如:

1 1 1

a-c-e

展开后应该是:abcde。而我的策略是处理掉一个「展开」操作后就马上输出前面的部分并删除,这就导致输出的结果是:abc-e。实际上应该保留后面的这个字符,以便作为另一个展开操作的开头。

 

第三题:矩阵取数游戏

动态规划、高精度

不得不承认我一开始确实想不到思路。看了网上的题解,发现主要是两种方法:(以下描述均针对矩阵的每一行,最终结果即各行结果之和)

  1. f(i, j) 表示在左边取i个数、在右边取j个数能得到的最大分数,则

    f(i, j) = max{ f(i, j-1)+w(m-j+1)*2^(i+j), f(i-1, j)+w(i)*2^(i+j) }

     

  2. f(i, j) 表示从第i个格子取到第j个格子能得到的最大分数,则

    f(i, j) = 2*max{ f(i+1, j)+w(i), f(i, j-1)+w(j) }

其中第二种方法很巧妙地避开了高精度乘法,用2在状态转移的时候进行累乘。最后,高精度最好用加法 char[] 而不要用 string,两者速度相差太明显了(几乎是超时与无压力AC的区别)。

 

第四题:树网的核

DFS

这道题目的特点是用大量的概念、定义来吓唬人。

几乎所有网络上的题解都说「只要对于一条直径进行计算即可」,但是我想不明白。那就姑且承认这个结论。

首先,在树上找到一条直径。方法如下:

  1. 从树上任意一点 u 出发,找到距其最远的点 v;
  2. 从 v 出发,找到距其最远的点 x。

路径 v -> x 即树网的直径。(证明见注释)

然后找核。枚举直径上的每个点,向单方向扩展出一段长度小于等于 s 的「核」,然后对于「核」上的每一个结点,求出它到每个点的最短距离。在所有这些最短距离中找出最大值,这个值就是现在这个「核」的偏心距。找到所有偏心距中最小的一个即可。

注释:关于用两次遍历求出直径的方法的正确性,证明如下:

首先,我们要证明从树上任意一点 u 出发找到的最远结点 v 必然是直径的一个端点。如果能够得到这个结论,整个方法的正确性就显然了。

先假设我们找到的 v 结点不是直径的端点。

我们可以证明 u->v 必然与直径 a->b 有交叉点。

如果没有交叉点,任选两条路径的两个端点相连就能得到一条更长的路径。如下图。

所以,既然有交叉点,设交叉点为 x,由 u->v 大于 u->a,可以推出 x->v 大于 x->a,那么路径 v->x->b 比 a->b 更长,a->b 不是直径,矛盾。

所以 v 只能是直径的端点。

noip2007提高组题解的更多相关文章

  1. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  2. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  3. NOIP 2001 提高组 题解

    NOIP 2001 提高组 题解 No 1. 一元三次方程求解 https://vijos.org/p/1116 看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~ 数据小 暴力枚举即 ...

  4. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

  5. 【NOIP2018】提高组题解

    [NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕

  6. [NOIP2007] 提高组 洛谷P1098 字符串的展开

    题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母获数 ...

  7. luogu1097统计数字[noip2007提高组Day1T1]

    题目描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出 ...

  8. noip2009提高组题解

    NOIP2009题解 T1:潜伏者 题目大意:给出一段密文和破译后的明文,一个字母对应一个密文字母,要求破译一段密文,如果有矛盾或有未出现密文无法破译输出failed,否则输出明文. 思路:纯模拟题 ...

  9. noip2008提高组题解

    第一题:笨小猴 模拟   第二题:火柴棒等式 搜索 深搜不用说,确定出两个加数然后判断能否拼出等式. 枚举确实不太好搞,因为枚举范围不确定,太大了容易超时,太小了容易漏解.不过这题的数据貌似很温和,我 ...

随机推荐

  1. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

  2. VC6.0环境安装STLport-5.2.1

    今天安装STLport,网上搜资料安装好久,都不行,因为STLport 的版本不对,我这是STLport-5.2.1新版本. (注意:下面的步骤都在一个cmd里操作,很简单的原因:环境变量啊) 1.首 ...

  3. 牛顿迭代法实现平方根函数sqrt

    转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根. 设其平方根为x,则有x2=a,即x2-a=0.设函数f(x)= x2-a,则可得图示红色的函数曲线.在曲线上任取一点 ...

  4. $('li','div') $('div li') $('div li')

    $('div','li')是$(子,父),是从父节点里找子,而不是找li外面的div $('div , li')才是找所有的div和li,之间不存在父子关系 $('div li') 是找div里面所有 ...

  5. Javascript 电子时钟源码

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. HDU 3501 Calculation 2 (欧拉函数)

    题目链接 题意 : 求小于n的数中与n不互质的所有数字之和. 思路 : 欧拉函数求的是小于等于n的数中与n互质的数个数,这个题的话,先把所有的数字之和求出来,再减掉欧拉函数中所有质数之和(即为eula ...

  7. spring @qualifier注解

    1.spring @qualifier注解用来在spring按类型装配可能存在多个bean的情况下,@qualifier注解可以用来缩小范围或者指定唯一. 也可以用来指定方法参数 2.@qualifi ...

  8. Servlet3.0的新特性

    注意:Servlet3.0的项目一定要使用Tomcat7.0才能看到效果!! 1.新增标注支持     在Servlet3.0的部署描述文件web.xml的顶层标签<web-app>中有一 ...

  9. QTP公开课视频-持续更新中。。。

    以下是视频的下载地址: http://pan.baidu.com/share/link?shareid=1760499709&uk=3711405498

  10. [置顶] android 与JavaScript的互相调用

    1.html代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> ...