CSP-S模拟73

Posted heoitys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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$另求 

 

 

 

以上是关于CSP-S模拟73的主要内容,如果未能解决你的问题,请参考以下文章

CSP-S 2019 第一轮 游记

[CSP-S模拟测试]:666(模拟)

[CSP-S模拟测试]:山屋惊魂(模拟)

[CSP-S模拟测试]:Median(暴力+模拟)

[CSP-S模拟测试]:真相(模拟)

csp-s模拟测试92