猎奇!THUWC2017试机题

    xiaoxiao2021-03-25  111

    A

    题目大意

           一个长度为 n 的序列,选择一个长度为 k 的子序列,使得字典序最小。        n log n 会被卡,要求线性。

           (这题其实挺正常的。。。)

    解法

           维护一个单调递增的栈。把前 n-k+1 个元素先加进来维护。        接下来,每次先弹出栈底(意思是最小的那个),然后再加一个元素进来维护。

    A加强版

    题目大意

           这是一道交互题。        先给你一个整数 k(k<=1e6),然后按顺序给你未知个整数 a[1]~a[n](n<=1.5e7,n 不输入),要求你求出一个长度为 k 的字典序最小的子序列。        内存 32M,即空间限制是 O(k) 的。

    解法1

           其实跟上一题是差不多的。。。        由于你不知道什么时候读完所有的数,所以你要开多一个队列存最后读进来的 k 个数,然后每来一个数,就把队头拿去维护栈。

    解法2

           直接考虑每 k 个数做一次。        假设我们目前的答案子序列为 A,然后又读了 k 个数存在 B 里,那我可以用两个指针扫这两个数组来合并。        时间是 O(n/k *k) = O(n)。

    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。

    转载请注明原文地址: https://ju.6miu.com/read-21252.html

    最新回复(0)