7
31
2015
0

NOIP 2012 Day1 题解


越早的NOIP题目越神啊,NOIP2012的题目做的真是累死了。可恶的出题人。


T1 Vigenère 密码

T1还是很水的,加加减减随便搞一下就行了。

代码在此。


T2 国王游戏

这题是贪心的思路,按$a_i\times b_i$排序得到的序列是最优的,证明如下:

对于任意的i,设$w_i$为第i个大臣得到的金币数,设$f_i=w_{i-1}\times a_{i-1}\times b_{i-1}$。

则有$w_i=f_i/b_i,\, w_{i+1}=f_i\times a_i/b_{i+1}$。

若交换第i个和第i+1个大臣,则有$w'_i=f_i/b_{i+1},\, w'_{i+1}=f_i\times a_{i+1}/b_i$。

$a_{i+1}\times b_{i+1}\geq a_i\times b_i,\, b_i>0,\, b_{i+1}>0\Rightarrow a_{i+1}/b_i\geq a_i/b_{i+1}$
$\Rightarrow w'_{i+1}\geq w_{i+1}$

$a_i>0\Rightarrow w_{i+1}\geq w'_i\Rightarrow w'_{i+1}\geq w'_i$

$a_{i+1}>0\Rightarrow w'_{i+1}\geq w_i$

综上所述$\max{w_i,w_{i+1}}\leq\max{w'_i,w'_{i+1}}$。

所以交换后不会比交换前更优。易知若任意两个相邻大臣交换位置,对前面和后面都没有没有影响,所以这样排列一定是最优的。

这个数据范围需要高精度,然而我网上找的高精度模板太慢了,过不了官方数据。。。

代码在此。


T3 开车旅行

首先预处理出从某个城市出发,小A和小B分别会走到哪个城市,用list或set可以做到$\mathcal{O}\left( n\log_2{n}\right)$的复杂度,然后做倍增,跑出从某个城市出发走$2^i$步能到达的城市及两人各自走的距离。这样的话已知出发城市和最远距离就可以在$\mathcal{O}\left( \log_2{n}\right)$的时间内得出答案。

代码在此。

Category: 题解 | Tags: NOIP | Read Count: 514

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com