泰山挑夫2

来源:互联网 发布:沈飞 知乎 编辑:程序博客网 时间:2024/06/10 16:44
A - Chips:n个人围成圈,按顺时针编号1-n,顺时针发牌,第i个人可以得到i张牌,总共m张牌,最后一次发牌时必须保证发牌着手中的牌大于将要发的人的编号,否则停止,最后发牌者手中剩几张牌。
sum(n):1~n的和,m = m%sum(n);从1~n遍历sum(i)直到sum(i)>m为止,m-sum(i-1)即为结果
B - Binary Number:给定01串,两种操作,如果是奇数就+1,偶数就 /2,直到等于1为止1,求最少的操作次数。
找规律,操作一共分为2部分,一个是 +1,一个是 /2 。
+1的操作次数:从后向前扫描,遇到的第一个1,和1之前的所有的0的个数
/2 的操作次数:01串的长度
特殊情况需要考虑:2^n次方时,只需要输出 长度-1 即可
C - Newspaper Headline:用若干个源串组成目标串,最少需要多少个源串
经过sumy大神的知道,才明白了题意。朴素的算法为O(n^2),超时;用Vector + 二分优化一下可近似到O(nlogn)
D - Queue:一群牛排队,他们认为年龄大的应该排在前面,如果有年龄比他小的排在他的前面,他就会感到不高兴,不高兴的程度就是他和最靠前的比他年轻的牛之间的距离。求每个牛的不高兴程度。
一开始直接全队扫描,时间复杂度在O(n^2)左右,超时。后来看别人有用优先队列优化过的。记录每个牛的年龄和他在队列中的编号,按年龄排序,每个牛的不满意度就是他前面出现的年轻的牛的最大编号和他自己编号的差-1;
F - Restoring Password:
水题:直接把字符串和0-9代表的串作比较就行
G - Friends:5个人是否存在 3对 两两都认识,或3对两两都不认识的情况
水题:枚举
H - Frames:
枚举所有状态即可