随机题目小结

prob1(from opentrains 10375 B):

你手里有一篇文章以字符串形式存储,该文章仅包含ASCII码值在32-126之间的字符

这篇文章被分成了若干页,但是页码被打乱了(即当前手里的所有书页不是按照原文顺序排列的)

同时对于原文中的每个非空白字符(空白字符包括空格和回车)

它有1%的概率变为'#',1%概率变为空格,1%概率会消失,97%概率保持不变

 

先给你原文(没有发生变化并且顺序正确没有按页分隔的原文)

现在按照手里的页码,把每页的内容输入给你(这里的内容会根据概率发生变化或者不变)

输入中不同页之间,原文和输入的第一页之间,会用单独“---###---###---###---###---###---###---###---###---###---###---###---###---”分割

保证页码数量不少于3不超过1000,且出最后一页外,每页内容不少于30行,不超过80行

最后一页不少于5行,且每页文章的每一行都不少于70个字符

 

请输出,输入的每一页都对应原文的哪一页

 

solution:

先处理出原文,和输入的每一页

然后O(n^2)枚举,i枚举原文的第几页,j枚举输入的第几页

然后对比前K个字符求一个最长子序列,如果长度超过80基本可以认为第j页就是原文第i页了

复杂度O(n^2*k),k取100即可

 

其他solution:哈希也可以,具体思路自己思考

 

prob2(from opentrains 10375 J):

n点m边的无向图,边都是随机出来的,无重边和自环

q个询问,每次问(u,v)最短距离,不可达输出1

所有询问也是随机出来的,保证没有重复

n<=1e5, m <= 3e5, q <= 1e4 时间限制6s

 

solution:

随机无向图中,m/n越大(我猜的,也可能是m/(n*n)越大,或者其他),所有点对的平均距离就越小

自己造一组数据发现nm都最大情况下,基本没有点对距离超过10

所以考虑双向搜索,极限数据下平均每个点连出去6个点,双向搜索平均复杂度大概就是O(6**(10/2))

当然n小一点会导致每个点连出去的点更多,但同时点对之间的平均距离也会减小,所以可以通过

 

prob2(from opentrains 10377 I):

1e7个元素,5e7个操作

所有元素初始值为(2**31-1)

每个操作(i, x)形式给出,表示要将第i个元素替换为x

你需要得到ans_j,表示第j次操作后的全局最小值

输出sum(ans_j * 10099**j)

 

由于操作过多,所以给你n元素数和m操作数后,会输入随机函数需要的几个参数

然后所有操作的两个参数都是随机函数获得

 

solution:

有新的位置元素大小<最小值,最小值修改为这个值

最小值所在的位置,元素发生变化,O(n)重新找

上面一种O(1),下面O(n)

随机情况下下面一种情况发生次数大概是m/n

所以总复杂度O(m)

posted @ 2019-05-27 19:34  ztztyyy  阅读(187)  评论(0编辑  收藏  举报