一周又过去了……距离noip似乎又近了一些……
做个简单的总结吧。。
每天都在考试,,考试的成绩都不大好,
我似乎一直在训练分析题目?
有挺多题想出了正解还是挺不错的。。233
大概说说一些有一点点感慨的题目吧。。
随便说几题,就算一个分享了……
顺序有点乱……
1:一个数字集合,大小为n,一开始所有状态都是未选择,
每次可以改变某一个元素的选取状态,
问每次改变之后,选取的元素里面互质的数对有多少个。
数字集合大小<=100000,数字<=500000。
分析:想出来了,无奈时间不够没写出来。。
虽说正解是莫比乌斯反演,但是其实还有另外的做法。
我一开始只会暴力……后面发现,每次加入或者剔除一个数x,
答案的变化量都是这个数和其它选取的数字中互质的个数。
而互质的条件是gcd(x,y)=1,
直接求gcd(x,y)=1的对数似乎并不容易……于是转化为求gcd(x,y)>1的对数,
这就很容易想了,只要y含有任何x的质因子,那么y就是不合法的。
用一个数组p[t]来记录数字t出现的次数,
那么把x分解质因子后是a1,a2..as,
只要减去(p[a1]+p[a2]+……+p[as])即可……是不是马上发现问题了?
假设一个元素是a1*a2,那它不就被重复减了么。。咦,不就是个容斥么??
由于50W分解一下质因子至多也就10个,所以时间复杂度是可以保证的。
2.给出一个序列,要求维护:
(1)修改一个单点(2)一段数字每个数各自mod x(x询问里给出)(3)询问一段数的和
序列长度<=100000,数字大小<=10^9,模数>1.
分析:不难可是似乎有人不会。。?
类似区间开根号……
发现x mod y=z,当y>x的时候没有去模x的必要了,,
那么用个线段树,
多记录一个区间最大值,如果最大值<模数,那么就没有必要继续走那个区间了。
假如说x mod y=z情况最差,那么y应该是x/2,
也就是说,不管怎样,最坏在log(10^9)内就会迅速到1,
所以对于操作二,其实直接暴力就好了。
3.约瑟夫问题,n个人,每次报数到m的出圈,问最后一个幸存者。
n<=10^9,m<=10^5
分析:沃日。。竟然一开始不会啊想了好久。。
加入n<=m有一种O(n)的做法,
不然就可以考虑一圈下来,每次去掉n/m个人,然后重新标号继续解决,
形成了一个递归结构,根据上次的解推出现在的解即可。
当然这个叫Jh……啥算法的,百度啦百度啦。。
竟然就这么没做出来。。。QAQ
4.求两个序列的LICS(最长上升公共子序列),输出长度和任意一种方案。
长度<=5000,数字<=10^9
分析:比较好想的是f[i][j]表示第一个序列到了i,第二个到了j的最长答案。
那么是O(N^4)的。。然后我用一个二维树状数组优化一下,
就O(N^2*(logN)^2),理论75了……
其实正确思路应该是去推到O(N^3)然后继续优化,详情问度娘。
5.给了个分层图,m层,每层K个点,边一定是从一层连到下一层的,
(有源点汇点,这两个是单点其它每层都是K个点)
然后每次可以进行“取反”操作,假设x层的第y个点连向(x+1)层的第t个点,
取反之后就会变成x层的第t个点连向(x+1)层的第y个点。
问经过若干或者没有取反操作之后,源点到汇点的最短路径数目为偶数条的方案数。
m<=10000,K<=10
分析:不错的题,,
发现取反与否只会影响两层的点,
由于是分层的图,所以可以看出dp的结构。
K很小,状压,f[i][sta]表示第i层状态为sta的方案数。
sta的意义是,K个点,到第x个点有偶数种x位就是0,不然是1.
那么根据图的连边,就可以直接转移了,得到新的sta'并且推过去。
假设p个点连向同一个点,那么这p个点在sta对应位置的值异或起来,
为0那么连向的点是偶数条路径,不然就是奇数条。
还是比较清晰的,时间复杂度O(M*2^K*K^2),会T
那么预处理一些东西,就可以去掉一个K了。
6.给出一个长度为m的括号序列S,选择任意括号序列p,q,
求使得p+S+q是合法的括号序列,而且三者长度之和为n的方案数有几种。
m<=100000,n<=100000,但是n-m<=2000。
分析:可能不算难把,,怎么会有挺多人不会的呢= =
分析一下这个问题,S在中间是固定的,而且去掉S内已经成对的括号对p,q的选取无影响。
处理后的S如果有r个右括号,L个左括号,那么p去掉成对括号后至少有>=r个左括号,
对q同理。
看到n-m的范围,就可以去考虑枚举p的长度以及p多余左括号的个数,q的信息自然就可以算了。
但是枚举的时候,怎么求出这个方案数呢?
用dp[x][y]表示长度x中,去掉成对括号后,剩余y个左括号的方案数。
每一位置只可能是左括号或者右括号,分别转移一下就好了。O((N-M)^2)预处理。
然后直接算答案就好了。
总结:实力还有欠缺不过似乎已经在浅浅地提升。
主要还是锻炼分析问题的能力以及减少失误的能力。
Noip RP++!
加油吧,500还有希望!