absi2011's Blog & Daily Life.

全新的开始       我要省选翻盘       I wanna AK in 高考\化学       自此,生无可恋
APIO游记[总]
[破碎的状态] JSOI Round 3 Day 2 碎碎念

[破碎的状态] JSOI Round 3 碎碎念

absi2011 posted @ May 16, 2016 09:13:11 PM in OI系列 with tags 小高考 JSOI 杂文 hash , 1139 阅读

今年

真的不知道能不能考好

信仰

支持我进省队吧

不想就此退役呢

最后一次机会,狠狠拼一把

也算--

对得起金中河西的初赛名额呢

(不然的话,就真的已经OI再见了啊...)

来谈谈今天的题目吧

t1:

给你一个树(森林)有n个点,每个节点有一个花费si和一个贡献pi

你要选k个点,保证如果x选了那么x的父亲ri(ri<i)也必须选(r为0表示没有父亲)

给定所有的s,p,r,求出Σp/Σs的最大值(必须选k个点,保留三位小数)

30%数据 n<=20

50%数据 n<=100

100%数据 n<=2500,si,pi<=10000,0<=ri<i

t2:

给你两颗树,第二颗树是第一颗上加了一个叶子

求这个叶子是哪个,如果有多个输出在第二颗上的最小的编号

10%数据 n<=8

30%数据 n<=200

60%的数据 n<=2000

100%的数据 n<=100000

t3:

给你俩等长的字符串,长度为N

我们定义,f(i,j,k)表示第一个字符串的第i到j个字符拼接而成的字符串接上第二个字符串第j到第k个字符拼接而成的字符串

例如

A="ABCDE"

B="DAEBC"

那么f(2,3,5)就是"BCEBC"

要求出所有f中最大的回文字符串的长度

PS:i<=j<=k

再PS:如果A或B中包含一个回文,那么我们也可以将它计入答案,也就是说如果

A="ABCBA"

B="DEFGH"

我们可以输出5,因为A是个回文串..也就是说,输出max(A中最大回文串,B中最大回文串,AB拼接出来的最大回文串)

10% N<=10

30% N<=200

50% N<=2000

100% N<=100000

=======================

考试开始的时候,感觉t1的30分反正要写,就写了

一直感觉t3的题意不明白啊..是不是A中取第一个B取全部就能达到n+1的最大值了啊(我以为A或者B中是回文串,或者总和是就行..)

然后问了两遍,第二次善良的老师解释给我了题意..

接下来始终不会t1所以t2,t3来回切题看,t2想到了一个hash,感觉能拿60分

我们考虑每个点,那么它周边的所有点有一个度数

我们计算每个点周边的度数平方的和,然后作为它的hash值

暴力删叶子,排序..

均摊复杂度O(n^2 log n),理论可过60分

当然hash被卡就滚粗了

t3想到了一个错误的解法

等于是给你一个长度为n+1的字符串,每次更新一个点,从第2个到第n个,每次求整个字符串的最大长度

大概双hash一下单调队列

后来发现不对..

假设某个点x为开始可以无限扩展,答案是n+1,那么在出现这一个答案的刹那,可能还有个点比它的上一次的答案要大而扩展性很弱,所以排在单调队列的前端..

还有个2个半小时,看着90分,决定冲一发190分

感谢@Ahdoc 教我如何用hash判断回文..

然后..

想到一个解法

每个点为中心,二分它能跑多远,然后把另一个数组停在相应位置匹配上,再二分看到底能跑多远..

可以证明这是对的,因为在那个点之外匹配的话答案就已经锁定那么小了,如果在那个点之内匹配的话答案不会增大

这样的话,我拍对以后还有半小时

测了个大数据,3s...

卡常数mode开启!

最后卡到考试结束还是1.05s左右感觉要跪啊..好多hash函数都被我强行手动inline了感觉好233....

不管了

出了考场,刷了2小时的兰因璧月..回去看分数

发现..

20 + 30 + 100!

t3给过了好评,突然发现我提出题目有问题的题目都给AC了呢[NOIP 斗地主;JSOI R2 D1T1;JSOI R3 D1T3]

t1的数据只给了20差评,我们几个集体去找出题组..

要回10分..

30 + 30 + 100 = 160

居然比waltz高

waltz:

0 + 50 + 100 = 150(waltz:论t1乱弄常数优化的危害性..)

据说有人AK了呢

希望后天能翻盘啊...


登录 *


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