1、华东交通大学2016年ACM“双基”程序设计竞赛 4/10
03 总结:找规律的题,二叉树的先序遍历,从根节点向下一直到叶子节点,判断路径上的左右子树(向左,序号增1,向右,序号增加(左子树的节点个数))
04 题意:((a-b)*c+d*e)/f=k,给定K的值,一共有多少种不同整数的组合(a,b,c,d,e,f)使公式成立(-50≤a,b,c,d,e,f≤50) 总结:重点是将公式转为(a-b)*c=k*f-d*e,将复杂度从O(n^6)化为O(n^3)。 一开始用map,结果超时,看来map存取花时间多。
05 题意:给出a,b,c,求(a^b)*c%mod,( mod=1e9+7,b<=10^100000 )。 总结:好题,欧拉定理,大数取模,快速幂。
07 题意:给出多场球赛的开始、结束时间,要看完所有比赛,但一台电脑同一时间只能看一场比赛,求要多少电脑。 总结:一开始用贪心,但超时。 这题只要在开始时间+1,结束时间-1,然后计算最大的前缀和就可以了。
08 题意:给出n个数,ans=min(a,b)*abs(pos_a-pos_b),输出ans的最大值。 总结:要善于找规律。题目的范围都是1e6,所以ans的值主要是以abs(pos_a-pos_b)为主。 做法:O(n)处理,注意开LL,取数列的左右界l,r,得到初始答案ans,每次取min(a[l],a[r])的一侧向中心遍历,当找到更大的数时,能更新则更新答案,当l>r结束,输出ans。
06、09压轴题,不会。先贴出学长的题解吧
6.这个题如果不是强制在线那么只需要维护一个字典树就行了。强制在线的话就维护一个树上的可持久化字典树就行了。
9.数据出得水,验题的时候没人写,其实暴力就可过。
标称做法是:后缀数组处理出sa数组和height数组,再对height建立RMQ来O(1)求出lcp(l,r);在每次查询的时候找到当前k串在sa数组中的位置以及在height数组中与其lcp长度为len(k)所能覆盖范围,
二分就可以得到向左向右延伸范围L,R,在这个范围里面我们只要1~n里面出现过的次数,就是相当于在一个任意区间内求出里面包含了多少个不同的数,这个用主席树解决。。或者可以后缀自动机之类的也可做。