1039 AlvinZH的学霸养成记IV 思路 难题,最大二分图匹配. 难点在于如何转化问题,n对n,一个只能攻击一个,判断是否存在一种攻击方案我方不死团灭对方.可以想到把所有随从看作点,对于可攻击的两个随从间连上边,这样就把问题转化为图了. 需要注意的是属性值的转化:免疫可看做生命值无限,剧毒可看做攻击力无限.(需要一点小小的机智) 图建好了,接下来怎么办呢?假设存在一种方案满足题意,那就是每个我方随从都可以找到敌方随从攻击,由于要团灭,只能存在一对一的情况,不存在多对一或一对多.如何表达这个…
850 AlvinZH的学霸养成记III 思路 难题.概率DP. 第一种思考方式:直接DP dp[i]:从已经有i个学霸到所有人变成学霸的期望. 那么答案为dp[1],需要从后往前逆推.对于某一天,有可能会增加一个学霸or不增加. ①增加:\((dp[i+1] + 1) * P\) ②不增加:\((dp[i] + 1) * (1-P)\) 其中,\(P = i * (n - i) * p / (C(n,2))\),C(n,2) = (n - 1) * n / 2.其含义是:n个人中选出一非学霸一…
1082 AlvinZH的学霸养成记VI 思路 难题,凸包. 分析问题,平面上给出两类点,问能否用一条直线将二者分离. 首先应该联想到这是一个凸包问题,分别计算两类点的凸包,如果存在符合题意的直线,那么这两个凸包(凸多边形)一定是不相交的. 计算凸包一般有两种方法,Graham扫描法和Jarvis步进法. Graham扫描法比较简单,好理解,书中也有伪代码.先找到最左下点P0,对剩下的点相对P0进行极角排序.然后依次进栈判断.当算法终止时,栈中从底部到顶部,依次是按逆时针方向排列的凸包中的点(有…
1081 AlvinZH的学霸养成记V 思路 中等题,计算几何. 这是一个排序问题,按极角排序.可以转化为叉积的应用,对于点A和B,通过叉积可以判断角度大小,共线时再判断距离. 叉积的应用.OA × OB = x1y2 - x2y1. OA × OB > 0:OA在OB的顺时针180°内: OA × OB = 0:三点共线,方向不一定相同: OA × OB < 0:OA在OB的逆时针180°内. 分析 注意数据范围,建议使用double.long long还是少用些好,真的. 参考代码 #in…
1032 AlvinZH的学霸养成记II 思路 中等题,贪心. 所有课程按照DDL的大小来排序. 维护一个当前时间curTime,初始为0. 遍历课程,curTime加上此课程持续时间d,如果这时curTime大于此课程DDL,表示无法学习此课程,但是我们不减去此课程,而是减去用时最长的那门课程(优先队列队首,课时最长). 贪心: 假设当前课程为B,被替换课程为A,则有A.d≥B.d,A.e≤B.e.既然curTime+A.d≤A.e,那么curTime+B.d≤B.e绝对成立,保证了B的合法性…
1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量网络上找增广路径,这里可以参考一下我院远古学长Song Renfei对于ISAP算法的讲解:ISAP 时间复杂度\(O(V^2 \sqrt E)\) 代码 #include <iostream> #include <cstring> using std::ios_base; using…
1064 Bamboo和"Coco" 分析题意 每个亡灵至少一个花瓣,相邻的亡灵中思念值高的要获得的花瓣高(思念值相等是不需要花瓣一样多的).主要考贪心思路,为了使得花瓣总量最少,每次比思念值更低的"邻近亡灵"的花瓣数多一就可以了 思路 都是先保证每个亡灵至少一个花瓣 思路一 直接模拟思路,同时关心左边和右边(或者说前边和后边),一次循环是不够的,比如3 2 1,修改了1号的花瓣数,再修改2号的花瓣数,此时会对一号产生影响.需要多次遍历,直到没有新的改变为止,算法为…
Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能量的重量为w ,生发效果为 r.但一瓶APTX4844的重量不能超过 S,否则很难过安检(难道不是难以下咽?)." "配置魔发药水需要用到至多两种原料:固态的绿色能量和液态的时光泉水.但是由于两者副作用不一样,*制作时优先选用副作用小的绿色能量,即先考虑使用绿色能量使得生发效果最大,然后再…
1065 Beihang Collegiate Pronunciation Contest 2017 思路 在字符串中不断做匹配 找到一个匹配就输出 时间复杂度\(O(n)\) ps.模式串是定长的,因此看做常数 代码 #include<string> #include<iostream> using namespace std; int main() { int n; cin >> n; string ch; cin >> ch; for (auto i…
1062 ModricWang的撒币游戏 思路 此题为2017年ACM-ICPC亚洲区域赛乌鲁木齐赛区的A题,现场94个队中有38个队做出此题.在这里作为满分以外的题,是为了让大家看一下外面一些题的风格,不要被三位助教的出题风格所局限. 此题首先需要知道一些高中数学概率论的知识.扔起N个硬币,如果每个硬币下落时,正反面朝上的概率都是确定的,那么这些硬币中正面朝上的数量是呈二项分布的. 考虑使用DP,\(prob[i][j]\) 表示扔了第i次后,有j个硬币正面朝上的概率.首先根据题设,\(pro…