一周学习简单总结
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还有希望!
做个简单的总结吧。。
每天都在考试,,考试的成绩都不大好,
我似乎一直在训练分析题目?
有挺多题想出了正解还是挺不错的。。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还有希望!
相关文章推荐
- 一周学习简单总结(二)
- Android shape,自己简单的总结。和学习。
- 嵌入式linux简单Web服务器 之 课设一周总结
- STL学习(四)阶段简单总结
- 新手学习Struts2的简单总结
- 天气预报项目学习总结(- ButterKnife - Retrofit 2.0(okhttp) - Rxjava - Jackson - Ormlite - Mosby简单使用总结)
- 【OC学习-29】单例设计模式的理解、案例和简单总结
- Python入门篇--简单总结+学习方式思考
- 学习python一周总结
- bootstrap学习总结简单整理1
- Bootstrap 栅格系统 学习总结 Bootstrap框架是如今最流行的前端框架之一,Bootstrap功能强大,简单易学,很符合实际应用场景。 只是Bootstrap的内容较多,新手
- 谈谈我对学习看法&一周学习总结
- 黑马程序员_Dom学习知识简单总结
- XML学习总结(2)——XML简单介绍
- 2017年1月23日学习总结----进程与线程的简单解释
- 个人碰到的简单问题处理,慢慢总结 分类: ubuntu学习 2013-08-12 10:36 385人阅读 评论(0) 收藏
- cairo学习简单总结
- Python学习基础总结:简单的银行卡密码输入错误过多的解决办法
- iosiOS学习总结----block的简单使用
- 【OC学习-28】自定义对象的归档和解归档:例子说明以及简单总结