A. 小P的2048
标签:
模拟
题解:
话说CWY暑假时还给过我一个2048的python程序
这道题很简单,题目中已经把实现方法给出来了,照着做就行
B. 小P的单调数列
标签:
Dp,BIT
题解:
很好的一道题,看似是数据结构优化Dp,
但是实际上考察的是对于下述性质的分析:
答案的序列里不同单调性的块最多有2个。
证明:
设一个序列有x,y两个块,考虑加入一个z
sum1=(x+y)/2,sum2=(x+y+z)/3;
令sum1<sum2解得(x+y)/2<z
但是我们发现这种情况下选x,y,z还不如只选z
所以无论如何,z都不可能对答案作出贡献。
证毕。
考场上运气不错,暴力拍暴力的时候发现小数点后面不是.0就是.5,
接着证明了一下就A掉了
接下来就是简单的Dp+BIT优化即可
C. 小P的生成树
标签:复数的转化,数形结合(说白了就是高考数学)+Kruskal
同样很好的一道题
算法1:
暴力枚举角度,把所以向量都映射到base向量上跑Kruskal即可,
枚举的间隔在0.01比较稳,上限大概是0.7或者0.8
实践证明这个算法可以碾爆标算。
算法2:
和上面的思路类似,
回想Kruskal的过程,我们只关注边权的相对大小,
考虑只枚举会使两条边的顺序变化的base,
设两条边分别为(x1,y1),(x2,y2),base的角度为z,令它们的映射相同,则:
x1*sin(z)+y1*cos(z)=x2*sin(z)+y2*sin(z);
tan(z)=(y2-y1)/(x1-x2); (x1==x2时z=pi/2或着3*pi/2)
z=atan(y2-y1)/(x1-x2)或atan(y2-y1)/(x1-x2)+pi