zoukankan      html  css  js  c++  java
  • CSPS模拟 65

      cbx又A两题%%%

     

      T1比较水,只需要想到lcm以内的数都只能被唯一凑出就可以。

      T2比较shi,毕竟std复杂度都不正确的题是不能称之为完整的题的。

      那么再感受一下T3满满的恶意

      

        起点已经固定了,考虑当终点也固定时该怎么花费最小代价

        一般的情况是,s和t都不在端点上,而端点又必须到达过,那么不可避免地,st两侧的边都被覆盖两次

        而且发现这两侧的边,都可以在不增加代价的情况下随意改变行动方向,所以覆盖两次就行了,没必要覆盖第三次。

        为了方便描述,如果s在t的左边(右边的话就把序列翻过来)

        那么大概的方向就是:向左先踩掉左端点,向右踩掉右端点,回过头到达t

        那么在两侧的边(1-s和t-n)什么方向都可以,也就是有n-t+s-1次花掉强制次数L的机会

        如果L<=那个次数,直接安排在两边什么地方就行了,注意左端点必须到达,必须分配一个;右端点向左跳到t至少用一次(如果t!=n),必须分配一个。

        L>那个次数,只能从s和t之间选一些边,让s到t向右走的过程中,先跳到这些边的右端点,再向左跳花掉L,然后正常向右。

        先求出最优的t,最后再跑一次构造一个解。

        

        先发出去,还要补一些奇怪的想法。

     

        upd:改题时以及写这篇随笔时一些奇怪的想法:

          1.把序列翻过来以后,L的值就不是L了,而是n-1-L,总感觉哪里不对劲,主要是L的过量、不足关系的判定上好像不够直观了,改题时猜想这样是对的,现在发现自己懵逼了。应该是没有问题,比如考虑s>l的情况,t>s时无论如何l都不会过量,而反过来后n-l-1则很容易就过量,好像冥冥中比较符合实际

          2.在给st两边的线段强制分配次数的时候,应该考虑L不够分的情况。如果s不在端点,t就必须在端点。我在代码里特判了L==1的情况,不知道如果不特判能不能在第一问直接把t!=n的方案滤掉

          3.给两边分配次数时,给1-s分从1开始分到s,给t-n分从t开始分到n,构造的时候则反过来行动,即后走左向边。感觉这样具有比较好的包容性

          4.构造t>s的方案时可以与s<t的并在一起,只要把s和tswap一下,然后压栈时把s也压进去,那么栈顶和栈底一定分别是s和t,只要在外面判断一下是从2输出到n还是从n-1输出到1,感觉这样构造比较好,虽然还是非常难打。

        uupd:上一个upd的2好像不行..把特判删了段错误到飞起..

          大概是因为只有l>1的时候,才能保证任何时刻要从堆里取出一个边的时候,堆里都已经有一条边..

          这样L或n-1-L的限制都不会大于n-2,在t拓展两次之前都不会要求从中间找边,给了堆足够的准备之间

  • 相关阅读:
    BERT 简介 P1_李宏毅
    GAN_P4 Learning from Unpaired Data_李宏毅
    GAN_P3_李宏毅
    Generation P1_李宏毅
    GAN_P2_Theory behind GAN_李宏毅
    李宏毅_Transformer p2
    李宏毅_Transformer p1
    强类型数据集 官方教程
    网页管理系统一
    读张子阳的用户验证自定义IPrincipal和IIdentity有感
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11640881.html
Copyright © 2011-2022 走看看