zoukankan      html  css  js  c++  java
  • 中大校赛2021题解

    link

    E 跟 H 还没切所以没写。。。

    《关于整个队伍不想写题一起去打球这件事》

    A

    纯签到。

    B

    也是纯签到,难以理解为什么一血要11min?

    不要什么都想着数据结构,可以直接用点亮的行数列数来算,对角线处理一下就行了。

    C

    签到。

    推推式子就行了~~~实在懒也可以高斯消元。

    D

    纯签到。

    E

    给出一个数列 (left{a_n ight}) ,每次可以选出其中一对相邻的数,将它们删去并插入它们差的绝对值。求最小的剩余的数。

    数据范围只有 (n le 8) , (T le 10^3),暴力即可。

    F

    是 E 的加强,数列变成 (1)(n) 的排列,同时要求求出删数顺序, (n le 10^5) , (T le 10^3)

    打表发现,答案只有 (0)(1)

    考虑给每个数一开始就确定符号,从大到小每 (4) 个数一组 $+,-,-,+ $, 此时每组的和必定是 (0) ,然后发现最小几个不完整也是满足的。

    每次取相邻两个异号的操作即可。因为我们的和是 (0)(1) ,所以必能找到两个这样的数,并且最后一定只剩一个数。

    这个做法大概是由最后的结果来推符号确定,取差绝对值不影响最后的符号。

    I

    嗯。。。不是我做出来的。。。

    还是队友强想到了构造。

    考虑下界实际上更为重要吧(

    我们要 (A imes D = B imes C) ,又要它们和它们的差尽量小。

    那么这就可以用几个相邻的数积的形式表示的吧!

    (m) 为下界,即 (lceil n-3 sqrt n ceil)

    我们找到一个最小的 (u) 使得 (u imes (u+1) ge m) ,再找到一个最小的 (v) 使得 ((u+1) imes v ge m)

    那么 (AD=BD=v(v+1)(u+1)(u+2)) 的构造是可以满足条件的。

    J

    神仙队友做神必题

    为什么会有这种题啊啊啊啊啊啊啊

    先是考虑平方的限制要满足,在序列中每隔一段距离放一个 (k) ,一共 (fk) 个,以满足条件,(k)(fk) 是我们自取的值。

    两个 (k) 之间就分治,在区间中央放一个区间大小的值即可。

    人肉二分?差不多。

    如果立方和太大就减小 (k) ,增大 (fk) ;如果和太大就增大 (k) ,减小 (fk)

    最终试出来是 (k=9980)(fk=100) 时可行。

    K

    发现值域只有 (left[1,16 ight]) ,复杂度应该跟值域有关。

    然后我们发现最终的序列是升序的,所以如果不走降序就只会有值域步。

    因为操作一定是从后往前的,我们考虑从 (R) 走到 (L) ,设 (f_{i,j}) 表示在 (i) 这个点要得到 (j) 最近能跳到哪里。

    (i-1)(f_{i,j-1}-1) 转移过来。

    然后由于可能有两个 (16) 合成 (17) ,所以值域要开到 (17) (反正我是尽量开大,实际上不会有两个 (17) 合并所以已经足够)。

    G/H

    来来来口胡一下再写

    G 是很显然直接每次取中位数分到另外两个栈,递归做。

    H 主要是限制了换栈的次数不超过 (20) 次,那么我们尝试优化 G 的做法。

    我们发现有许多次拆分是只拆了栈的一部分的,这时就会浪费换栈次数。

    那么我们每次都把一个栈拆空即可。

    update:

    好吧好吧我的问题,H 题做法假了,最后出现的是乱序。

    但是我们这样做了之后栈的样子其实是相当于由我们(划分方式)决定的了,那我们根据得出的乱序和期望的顺序写出映射,然后把划分方式改一改可过。

  • 相关阅读:
    LiveData讲解
    Android分区存储相关
    十:存储过程和函数
    九:事务
    八:约束 和分页
    七:常见的数据类型
    六:创建和管理表
    五:SQL常见的函数
    四:SQL基本语句
    二:MYSQL 数据库的安装和常见一些命名
  • 原文地址:https://www.cnblogs.com/Kelvin2005/p/15427493.html
Copyright © 2011-2022 走看看