[LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC】的更多相关文章

[LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 \(x_i,y_i\).可怜有一个技能是在平面上画一个 \(m\) 个点的简单多边形,并消灭所有严格在多边形内部的敌人. 不难发现如果想要快速的消灭敌人的话,只要画一个足够大的简单多边形就行了.但是这样的游戏性就太差了.于是可怜打算为游戏增加一定的随机性. 可怜在平面上随便画了一个 \(m\) 个点…
题解 我们把这个多边形三角形剖分了,和统计多边形面积一样 每个三角形有个点是原点,把原点所对应的角度算出来,记为theta 对于一个点,相当于半径为这个点到原点的一个圆,圆弧上的弧度为theta的一部分 相当于一条直线和这个小圆弧求交,直接算出有交的角度然后累加最后除2PI即可 可以拿余弦定理爆算(反着也不是你自己算 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,in…
题面 传送门 题解 计算几何的东西我好像都已经忘光了-- 首先我们可以把原问题转化为另一个等价的问题:对于每一个敌人,我们以原点为圆心,画一个经过该点的圆,把这个圆在多边形内部的圆弧的度数加入答案.求总的度数是多少 因为这是个简单多边形,我们可以把它给三角形剖分.就是说把每条边都和原点构成一个三角形,然后对圆计算这个三角形的贡献,根据这条边的顺逆时针顺序来决定贡献要加上还是减去.易知最后的贡献就是这个多边形的贡献 那么我们对于每一个圆,暴力枚举多边形的一条边和原点构成的三角形,然后判一下圆弧和三…
题面 题意转化为: 判断每个点所在的圆有多长的弧度角位于多边形内部. 然后就很暴力了. 每个点P,直接找到多边形和这个圆的所有交点,按照距离P的角度排序. 找交点,直接联立二元二次方程组.... 需要判断一段弧是否在多边形内部. 向量随机旋转角度,判断点是否在多边形内部即可. 如果该点在多边形边上,返回-1,重新旋转. 由于double,所以不会出现射线在多边形边上情况. 注意: (0,0)要特判是否在多边形内部.+eps判断 #include<bits/stdc++.h> #define r…
题解 什么,我这题竟然快到了LOJ rk1???? 搜起来有点麻烦,不过感觉还是比斗地主好下手(至今没敢写斗地主 首先是暴力搜牌型,最多\(3^{16}\)(什么判解还要复杂度怂成一团)的样子?? 然后判牌型,显然只要考虑单牌,和3 + x,4+2 然后暴力搜网友的3和4 暴力搜jry的3和4 然后枚举3搭配了几个2, 然后jry从大到小开始去除大小为2的对子,网友从小到大,是个简单的贪心 之后看看可以去掉的单牌的个数,也是jry从大到小,网友从小到大 之后的就是单牌互相压看看合不合法就好了 代…
LOJ 思路 显然多边形旋转可以变成点旋转,不同的点的贡献可以分开计算. 然后就变成了要求一个圆在多边形内的弧长. 考虑把交点全都求出来,那么两个交点之间的状态显然是相同的,可以直接把圆弧上的中点的状态求出来. 求圆弧上的中点也要特判两个向量恰好相反,或是转的角度大于\(\pi\). 然后求交点--求出和直线的交点再判一下在线段上即可. 然而--有一种较为恶心的情况:没有交点或是只有一个交点,此时可能圆把多边形包住了,也可能是被包住了. 判一下这个点随机转某个角度后是否在多边形内即可. 还要特判…
题解 感觉智商为0啊QAQ 显然对于一个长度为\(len\)的border,每个点同余\(n - len\)的部分必然相等 那么我们求一个\(f[a]\)数组,如果存在\(s[x] = 0\)且\(s[y] = 1\)且\(|x - y| = a\) 这个很好求,只要把0和1分别挑出来,NTT卷一下就好了 一个\(len\)合法,即它的\(n - len\)的倍数\(k\),\(f[k]\)都等于0 代码 #include <bits/stdc++.h> #define fi first #d…
题解 想出70的大众分之后就弃疗了,正解有点神仙 就是首先有个比较显然的结论,就是要么是一直往左走,要么是走一步右边,然后一直往左走 根据这个可以结合RMQ写个70分的暴力 我们就考虑,最优的话显然是走一步左边就到了目标点,第二步才开始有分叉 假如我们先走了一步左边,然后就变成了,从\(L[x]\)开始走,下一步可以走到\([L[x],N]\)的所有点最小的转移点之前,之后再把后来走的点代价都加上1即可 这样的话,不管是一直走左边,还是走了一步右边再走了左边,情况都被包含了 这个时候考虑这个问题…
题解 神仙的状压啊QAQ 设一个\(f[S]\)表示数字的集合为\(S\)时\(sum[S]\)为前缀最大值的方案数 \(g[S]\)表示数字集合为\(S\)时所有前缀和都小于等于0的方案数 答案就是\(sum_{S} sum[S] * f[S] * g[2^{N} - 1 - S]\) 求\(f\)每次相当于往前面插入一个数,如果\(sum[S] > 0\)就更新 \(f[S \^ (1 << i - 1)] += f[S] (sum[S] > 0)\) 求\(g\)只要每次看看…
题解 简单分析一下,如果这个选手成绩是0,直接输出\(\binom{n}{k}\) 如果这个选手的成绩没有被翻倍,那么找到大于等于它的数(除了它自己)有a个,翻倍后不大于它的数有b个,那么就从这\(a + b\)个选手里找翻倍选手使得它排名不变 答案是\(\binom{a + b}{K}\) 如果这个选手成绩翻倍了,那么大于等于它的所有数,依旧大于它的有\(c\)个,然后剩余\(a - c\)个必须翻倍,剩下的翻不翻倍随意,所以答案是 \(\binom{N - (a - c) - 1}{K -…