A题 Rescue The Princess
题目大意:给出等边三角形的两个点的坐标,求另外一个点的坐标。
解题思路:画出图,求出两点的斜角和距离,然后根据几何方法乱搞。
解题报告:here
B题 Thrall’s Dream
题目大意:题目给出一张图,问任意两点能否有一天路径连接
解题思路:强连通分量,然后缩点,只要形成一条链或者一个环就满足条件!虽然说重边不影响Tarjan的正确性,但是重边会影响度数的统计。
解题报告:here
C题 A^X mod P
题目大意:题目意思很简单,就是求(A^f[1]+A^f[2]+。。。+A^f[n])%P
解题思路:直接扫描一遍结果肯定超时,用快速幂计算幂值有很多重复的计算,因此想办法将结果保存在数组里面,dp的思想。显然f[i]=fix*k+j,这样分解是对的,那么选取一个合适的fix,这样数组可以存下需要的解。不妨令fix=31623,那么A^(fix*k+j)%m,就可以分解成(A^k)^fix*A^j,用dpk[i]保存(A^k)^i,dpj[i]保存A^i,那么
A^f[i]=dpk[i/fix]*dpj[i%fix];
解题报告:here
D题 Rubik’s cube
未能ac
E题 Mountain Subsequences
题目大意:给出一个字符串,求这样的子串个数 a1<a2<...<ai < Amax < aj <.....<an;
解题思路:
要计算这样的个数,那么问题可以分解成计算上升子序列的个数和计算下降子序列的个数,然后枚举最大点。
dp[26],dpl[i],dpr[i].dp[26]表示到i为止以某个字母为结尾的上升子串个数,dpl[i],表示以s[i]为结尾的上升子串个数,dpr[i]同理。
于是状态方程:
dpl[i]=sum{ dp[j] }(s[j]<s[i])
dp[s[i]]=dpl[i]+1;
dpr[i]=sum{ dp[j] }(s[j]<s[i])
dp[s[i]]=dpr[i]+1;
解题报告:here
F题 Alice and Bob
题目大意:给出一个多项式,然后给出q个询问,每个询问求指数部分是P对应的系数是多少。
解题思路:将式子展开,发现非出现合并项,也就是说展开的式子对应的每个项是唯一的。那么对于某个项P,P肯定是由多个二进制相加得来,那么就肯定能分成多个二进制的数,于是根据P枚举P的二进制的每一位,是1就乘上对应的项。
解题报告:here
G题 A-Number and B-Number
题目大意:求第n个Bnumber。
解题思路:对于这种无法直接求解答案,我们只能试着二分枚举答案来做,判断是否满足条件,通过二分不断往正确解缩进。那么问题就变成求n以内的数包含了多少Bnumber,这个很明显是用数位dp求解,先求出Anumber的个数,然后减去不满足的数就是Bnumber的个数,处理有一点小技巧。
解题报告:here
H题 Boring Counting
划分树+二分,很遗憾未能习得次技能无法ac。
I题 The number of steps
题目大意:一个金子塔型的迷宫,一个人在金子塔的定点,现在要走到金子塔的左下角,给出了这个人走左边的们,左下角的们,右下角的门,对应的概率,现在问这个人走到金子塔左下角步数的期望。
解题思路:直接搞,E[i][j],表示位置i,j步数的期望,然后倒推,最终答案E[1][n]。很简单的一道概率dp。
解题报告:here
J题 Contest Print Server
这题模拟题,整场里面的大水题,坑点挺致命的,打印机可以打0张纸,ORZ.
题解报告:here