test0705
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^2\log_2n)\)
然后我们发现,对于相同的 \(a_k\) 显然越靠近后面的队答案贡献越大
那么我们可以预处理当前 \(a_i,a_j\) 时对应的 \(k\) 在哪个位置
这里可以使用 std:map
预处理(开了 \(O2\) 嘻嘻)
然后就可以过了……
考试总结
这次考试T1炸了,可能也是考虑不周全的问题,导致答案都小了 \(1\) 而且全场就这道题没有多拍……
以后考试如果时间充裕的话还是可以写下对拍差错,然后就可以保证自己代码的正确性……
(话说这两天考试这难度还是挺舒服的嘻嘻嘻)