• CCPC2021哈尔滨


    因为一些不可抗力原因贴不了代码,只能讲讲解题思路。

    B

    Description

    给定一个数组,可以在其中取出一个长度为偶数的子序列,满足\(a'_{2i-1}+a'_{2i}\)的值都相等,求子序列长度的最大值。

    Solution

    观察到\(a_i\)范围很小,枚举和的值,记录每个和对应的最大子序列长度,求最大值。
    求当前和对应的最大子序列长度:从左到右扫描,能够和前面在上一对之后的数字成对的话,就把这对加到答案里即可。这个过程用桶记录,two pointes维护。

    D

    Description

    对约分进行重定义,如果\(\frac{p}{q}=\frac{p'}{q'}\)且p'、q'分别可以通过p、q同时删去相同的数得到,那么就称这个过程为约分。求满足约分条件的最小p'、q'、

    Solution

    由于p,q的数位范围<20,所以我们考虑枚举p的每一位删于不删,得到p‘。
    \(q'=\frac{p'q}{p}\),只要q'为整数且p'、q'分别可以通过p、q同时删去相同的数得到,即他们删去的0~9的个数一一相等,那么便为一次合法的约分。对p',q'取最小值即可。

    E

    Description

    给定一个数组,希望知道满足\(2^{i-1}\;mod\;M=a_i\)的M是否唯一,并求出唯一值。

    Solution

    找到第一个不满足\(a_i=2^{i-1}\)的i,记为x。若全满足,则任意大于\(a_n\)的数都可以是M。
    \(a_x=2^{x-1}\;mod\;M\)\(M\in(2^{x-2},2^{x-1})\),故\(M=2^{x-1}-a_x\)。对x后面的数进行验证即可。
    但有一组特殊情况,若x=1,按上面的式子算\(M=1-a_x\),若\(a_x\geq1,M\leq0\),不合法;若\(a_x=0\),M=1,对x后面的数进行验证即可。

    I

    Description

    给定一个数组,每次可以对任意一个下标数组idx(不要求数组元素互不相同),将\(a_{idx_i}-2^{i-1}\)。求最少操作几次可以使数组全为0。

    Solution

    问题可以转化为将所有数按二进制拆位,\(t_i\)记录\(2^i\)出现的次数。
    显然,\(2^i\)要么作为\(2^i\)被消掉,要么被拆分成更小的\(2^j\)被消掉。
    我们希望最后得到的t序列是单调不上升的且\(t_0\)尽可能小。
    二分答案ans,然后贪心判断即可。
    判断方法:
    从左到右扫描\(t_i\),记还需向后面借debt个\(2^i\)。我们希望在不打破单调不上升的基础上,尽量多借,已便让后面的数尽可能小。
    随着i增加,debt按2的倍数下降(\(2^idebt=2^{i'}debt'\))。
    若当前\(t_i\)<ans,则要向后面借\(2^i\),即\(debt=debt+ans-t_i\)
    若当前\(t_i\)>ans,则要还前面借的\(2^i\),即\(debt=debt-(t_i-ans)=debt+ans-t_i\)
    因为只可能向后面借到偶数个\(2^i\),所以若debt为奇数,那就只能少借/少还,即\(debt=debt+ans-t_i-1\),对i及i之后的\(t_i\)能达到的ans-1。

    J

    Description

    给定一个矩阵,求多少个数满足:是自己那行的最小值 且 是自己那列的最小值。

    Solution

    纯模拟。

  • 相关阅读:
    Windows:C:WindowsSystem32driversetchosts
    Quartz:Cron Expressions
    RabbitMQ:基本命令
    架构:一致性
    Javascript:自己写异步流程编程框架
    Python:Hello World级别的SimpleDb
    架构:互联网架构
    数据访问:三大范式
    数据访问:Implementing Efficient Transactions
    技术人生:special considerations that are very important
  • 原文地址:https://www.cnblogs.com/AireenYe/p/CCPC2021Haerbin.html
Copyright © 2020-2023  润新知