test0705
T1 强迫症
得分情况
期望:100
实际:20
改后:100
题意
给一个串,问至少加入几个字符可以变成回文串
犯傻原因
也不晓得……思路是对的,然后WA的点都是大了1……
正解
直接反转原串
然后求最长公共子串
然后答案就是 (n) 减去最长回文子串
T2深意
得分情况
期望:100
实际:100
题意
现给出一段话 (s) ,和一个单词 (t) ,已知单词 (t) 有别有深意,
也就是说有两个意思,求 (s) 可能有多少个意思?答案对 (1000000007) 取模。
正解
先求KMP,然后DP
设当前长度为 (n) 的答案为 (f[n]) 那么,显然 (f[n]=f[n-1])
然后,如果当前位置是匹配串的结尾处,那么设匹配串长度为 (l) 那么 (f[n] = max (f[n],f[n-l]))
T3 斐波那契子序列
得分情况
期望:100
实际:100
题意
询问最长斐波那契子序列……
正解
首先考虑暴力,设 (f[i][j]) 为当前处理到了 (i) ,是从 (j) 转移过来的,那么显然 (f[i][j] = f[j][k]+1 (a_k + a_j = a_i))
然后这就要 (O(n^3))
然后我们通过数据范围可以想到肯定是 (O(n^2log_2n))
然后我们发现,对于相同的 (a_k) 显然越靠近后面的队答案贡献越大
那么我们可以预处理当前 (a_i,a_j) 时对应的 (k) 在哪个位置
这里可以使用 std:map
预处理(开了 (O2) 嘻嘻)
然后就可以过了……
考试总结
这次考试T1炸了,可能也是考虑不周全的问题,导致答案都小了 (1) 而且全场就这道题没有多拍……
以后考试如果时间充裕的话还是可以写下对拍差错,然后就可以保证自己代码的正确性……
(话说这两天考试这难度还是挺舒服的嘻嘻嘻)