随机题目小结
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)