zoukankan      html  css  js  c++  java
  • CSP-S模拟73

        T1模拟挂了,T2A了,T3不会~总分100

      

     

     

     A.小P的2048

        简单的模拟,注意细节,考试时打挂了,因为大样例非常特殊,它只有0,1,2操作,而我正好right操作打飞了,100->0

      B.小P的单调数列

        离散化,倒序枚举,三个树状数组维护最大的单调升序列的和,最大降序列的和,最大一部分上升序列加下降序列的和,转移挺简单的

      C.小P的生成树

        最大生成树中的所有向量的和的模长是一个合向量的模长,即所有向量在这个合向量的方向向量上的映射(分向量的模长)之和

        我们可以$360^{Huge。}$无死角枚举所有方向向量,但是这样枚举会有很多(虽然实测0.01度的枚举会非常快)

        kurskal有一个性质:生成树的形态只与各边边权的相对大小有关,而与具体权值无关

        而对于两个向量,存在一个方向向量使得它两个在这个方向上的投影值相等

        那么这个方向向量就将整个$[0,2π]$区间分成了两个部分,一部分向量1投影大,一部分向量2投影大

        枚举每两个向量,求出划分的边界,这些方向向量将$[0,2π]$区间划分成若干个小区间,在每一个小区间内这m个向量(边)的相对大小确定,所以直接跑最大生成树即可

        具体做法,枚举两个向量$(a,b),(x,y)$,在某一方向向量 $(cosθ,sinθ)$投影相等,则 有式子 $ a*cosθ+b*sinθ =x*cosθ+y*sinθ $,移项化简得 $tanθ=frac{a-x}{y-b} $

        可得两个值 $ θ_1=arctan(frac{a-x}{y-b}),θ_2=θ_1+π$,将$θ$存进数组

        求出每两个边(向量)的边界的方向向量的$θ$,再将所有角度sort一下,枚举 i和i+1的角度之间的任意一个角度的方向向量都可以淂出这个区间内$m$个向量的相对大小,最好是枚举两个的中间的角度$(θ_1+θ_2)/2$的方向向量$(cos θ_3,sinθ_3)$,那么向量$(a,b)$在这个方向的映射就是$len= (a*cosθ_3+b*sinθ_3)$

        跑最大生成树,记录$sum a$和$sum b$,求出ans,因为映射到的方向向量只是反映了这个区间内m个向量的相对大小,也就是可以确定m个向量在这个区间内跑生成树选择那些边,但选择的边在这个区间的和不一定就和该方向向量一致,所以真正的边权和还需要统计 $sum a$和 $sum b$另求 

     

  • 相关阅读:
    海龟交易
    暑假攻略:怎样让孩子过一个充实又省钱的假期
    值得追随
    在哪里能找的你想要的答案?
    顺势加仓策略
    交易中 你的加仓策略是怎样的?背后的逻辑是什么?
    驻守深寒:寻找那些有效地关键K线
    统计相关
    求助Ubuntu16.10如何设置默认启动为字符界面
    【Linux系列】Ubuntu ping通,xshell无法连接
  • 原文地址:https://www.cnblogs.com/heoitys/p/11674371.html
Copyright © 2011-2022 走看看