网络赛结束了,最后一发合肥站不知道拿没拿到名额,看天命了,然而网络赛好题还是不少的,起码我这种模版流感到了很大的压力
简单的水题我还是会做的,我要记录一些比简单题难一点的,大概铜牌难度的题(银牌难度的暂时我还不行呢)
先从最后一场来吧
合肥站网络赛:
hdu5493
题意:给你n个人,每个人都有身高,然后他会告诉你他前面或者后面有多少个人比他高,这是随机的
题解:线段树维护,要求输出字典序最小,首先先给身高排序,然后从低开始插入,如果他前面比他高的人的个数大于等于区间里的空位,那么就是不可能的,这很显然啊
然后就是字典序最小,就是从前查询一下,从后查询一下,看哪个更靠前,唉我还是太弱了,其实这题还是很水的
AC代码: http://paste.ubuntu.net/12602449/
题意:给你一个数d,然后他二进制格式下1的个数为L,然后给你个范围s1和s2,要求你找一个比d大的,二进制中1的个数满足在s1和s2之间的最小的数字
题解:构造题,先把d+1,然后判断d+1里面1的个数,如果在范围内,那么很好,如果不在,分为两种情况
1. 个数<s1,那么就需要增加1的个数,就是从右到左把0的位置变成1,就是加上(1<<i)
2.个数>s2,那么就需要减少1的个数,就是从右到左碰到1的位置,然后加上(1<<i)。
如果操作之后不满足,继续上面的操作,开头我相通了,但是写的太复杂,各种WA,后来怒了理清思路重写就过了
AC代码 : http://paste.ubuntu.net/12608008/
题意:给你一个矩阵,然后就从1,1走到n,m的路径的最小方差
题解:dp,然而我并没有想出来状态,感觉我DP想状态还是不行啊,这题居然状态是枚举走到这个点的权值和,然后记录最小权值平方和。最后枚举(n+m-1)*dp[n][m][k]-k*k的最小值即可了,我dp能力真是太弱了,而且手速也不行,这不科学啊
AC代码: http://paste.ubuntu.net/12608918/
For a given integer x (0≤x<232) and a given prime number M (M≤46337) , print [y]%M . ( [y] means the integer part of y )
就是求这个玩意的整数部分模M啊
但是指数太大,需要模掉
我开头不知道,就很愚蠢的用了欧拉定理
后来想想无理数怎么能用数论的知识呢,这题应该是找广义斐波那契数列的循环节,先推递推式
假设An=(5+2根6)^n Bn=(5-2根6)^n;
5-2根6<1,所以Bn<1,然而An+Bn为整数,所以An的整数部分就是An+Bn-1=Cn
假设Dn=Cn+1=An+Bn
然后两边同乘(5+2根6)+(5-2根6)
得到10Dn=Dn+1+Dn-1
于是可以递推模M,找出循环节,因为模M的循环节都不会很大,可以暴力打
当然求循环节是有方法的,不过太难了,我不懂,附菊苣博客http://blog.csdn.net/ACdreamers/article/details/25616461
找到了循环节之后然后存下来然后就可以把指数模掉,然后再递推一遍就好了啊
AC代码 : http://paste.ubuntu.net/12710815/