您的位置:首页 > 其它

一周学习简单总结

2017-10-21 14:30 197 查看
一周又过去了……距离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还有希望!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: