一个长度为 n 的序列,选择一个长度为 k 的子序列,使得字典序最小。 n log n 会被卡,要求线性。
(这题其实挺正常的。。。)
维护一个单调递增的栈。把前 n-k+1 个元素先加进来维护。 接下来,每次先弹出栈底(意思是最小的那个),然后再加一个元素进来维护。
这是一道交互题。 先给你一个整数 k(k<=1e6),然后按顺序给你未知个整数 a[1]~a[n](n<=1.5e7,n 不输入),要求你求出一个长度为 k 的字典序最小的子序列。 内存 32M,即空间限制是 O(k) 的。
其实跟上一题是差不多的。。。 由于你不知道什么时候读完所有的数,所以你要开多一个队列存最后读进来的 k 个数,然后每来一个数,就把队头拿去维护栈。
直接考虑每 k 个数做一次。 假设我们目前的答案子序列为 A,然后又读了 k 个数存在 B 里,那我可以用两个指针扫这两个数组来合并。 时间是 O(n/k *k) = O(n)。
读入一个字符串(长度 <= 20),请你读懂字符串的含义并用程序输出对应的数字。 比如字符串是“This year”,你应该输出“2016”。 该题有 20 组数据,每组数据的字符串都是相同的。 该题可以多次提交,每次提交都能返回评测结果(AC、WA 等)。
枚举答案显然是不行的。。。 让机器变成 AI 读懂字符串好像也不行。。。 只有我们自己想办法知道字符串是什么了。
试通过评测结果来推断字符串是什么。 比如我们猜字符串第一位是 a,那么如果 s[1] 果然是 ‘a’,就让它返回 RE,否则让他返回 TLE。我们知道肯定有办法设计算法使它强行 RE 或 TLE 或其他什么的。 然后每一次提交可以判断 20 次,所以可以在有限步数内得到字符串。
用提交状态判断还是慢了点。 我们可以考虑用时间来判断。比如,如果它第一位为 a,就让它循环 100 次,b 就 1000 次……这样一次提交就知道整个字符串了。 时间误差比较大,所以可以再改,用空间来判!
这是一道题答题,有 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。
