A
题目大意
一个长度为 的序列,选择一个长度为 的子序列,使得字典序最小。
会被卡,要求线性。
(这题其实挺正常挺经典的。。。)
解法
本质是贪心,假设目前是第 轮,上一轮选了第 个,那么现在就是在 里取最小值。
求最小值的区间是滑窗向右的,可以用单调队列
A加强版
题目大意
这是一道交互题。
先给你一个整数 (),然后按顺序给你未知个整数 (, 不输入),要求你求出一个长度为 的字典序最小的子序列。
内存 32M,即空间限制是 的。
解法1
其实跟上一题是差不多的。。。
由于不知道什么时候读完所有的数,所以要开多一个队列存最后读进来的 个数,然后每来一个数,就把队头拿去维护单调队列。
解法2
直接考虑每 个数做一次。
假设我们目前的答案子序列为 A,然后又读了 个数存在 B 里,那我可以用两个指针扫这两个数组来合并。
时间是 。
B
题目大意
读入一个字符串(长度 <= 20),请你读懂字符串的含义并用程序输出对应的数字。
比如字符串是“This year”,你应该输出“2016”。
该题有 20 组数据,每组数据的字符串都是相同的。
该题可以多次提交,每次提交都能返回评测结果(AC、WA 等)。
猎奇题

解法1
枚举答案显然是不行的。。。
让机器变成 AI 读懂字符串好像也不行。。。
只有我们自己想办法知道字符串是什么了。
试通过评测结果来推断字符串是什么。
比如我们猜字符串第一位是 a,那么如果 s[1] 果然是 'a',就让它返回 RE,否则让他返回 TLE。我们知道肯定有办法设计算法使它强行 RE 或 TLE 或其他什么的。
然后每一次提交可以判断 20 次,所以可以在有限步数内得到字符串。
解法2
用提交状态判断还是慢了点。
我们可以考虑用时间来判断。比如,如果它第一位为 a,就让它循环 100 次,b 就 1000 次……这样一次提交就知道整个字符串了。
时间误差比较大,所以可以再改,用空间来判!
C
题目大意
这是一道提答题,有 10 组数据。
一组数据中,若读入是 x,正确答案是 ans,则 |ans-x|<=5。
一个测试点你输出 y,可以获得的分值是 max( 0, 11-e^|y-ans| ),分值会下取整。
现在让你 AC 这个题。
解法
得 10 分:y=ans
得 8 分:|y-ans|=1
得 3 分:|y-ans|=2
其余得 0 分。
于是我们先猜 x,若不为 0 则再猜一次就出解;若为 0 就猜 x+5,再不行就 x-5,则一定出解了。
最坏情况下,第 4 次提交即可 AC。
