首页
首页
BOT
沸点
课程
直播
活动
AI刷题
NEW
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
XCPC
蛋蛋兽
创建于2021-06-29
订阅专栏
题解及算法
暂无订阅
共60篇文章
创建于2021-06-29
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Codeforces Round #598 (Div. 3) 题解
题目要构造一个式子:$nx+y=S(x\leq a,y\leq b)$。考虑找一个最大的$x_1$使得$nx_1\leq S$,剩下的部分用$y$补,如果$x_1>a$,就把$x_1$换为$a$继续用$y$补剩下的。判断是否能凑出来。 要让字典序最小,就要把小的数字尽量交换到前…
DP专题
起点必定是入度为$0$的点。假设现在选了一个入度非$0$的点$u$,因为点权均为正值,所以选一个通过有向边连接$u$的点作为起点更优。用拓扑排序,更新到达第$i$个点能够获得的最大价值并记录路径。 先把输掉拿的经验维护进答案,现在开始嗑药,这个问题就变成一个典型的$01$背包问…
Codeforces Beta Round #7 题解
把$C$移项,转化成求$Ax+By=-C$的整数解。扩展欧几里得。 令$d=gcd(a,b)$,扩展欧几里得可以求得一组整数解$(x_0,y_0)$,满足$Ax_0+By_0=g$。 根据贝祖定理,若存在两个整数$x_1,y_1$满足$Ax_1+By_1=-C$,那么必定有$(…
Codeforces Beta Round #6 (Div. 2 Only) 题解
数据范围比较小,直接爆搜+剪枝。 剪枝1:如果当前攻击的次数大于等于已知的最小次数,得到的答案一定不会更优。 剪枝2:考虑攻击第$i$个时,必须要把第$i-1$个打死,因为之后不管怎么攻击都不会再对第$i-1$个造成影响。所以攻击次数从$max(0,(h[cur-1]+b)/b…
Codeforces Beta Round #3 题解
太水,略。 以下只讨论不能全部放入的情况。 刚开始以为是01背包问题,但是数据太大,而且物品的花费只有两种:$1$(称为$A$)或$2$(称为$B$)。两个$A$可以合并成一个$B$。把$A$从大到小组对合并到$B$中,那最后只剩下$0$个或$1$个$A$,对新得到的$B$按照…
Codeforces Beta Round #1 C. Ancient Berland Circus 题解
我觉得洛谷上的大多数题解应该有问题,如果我的思路不对请指正,谢谢。 前边题解里说之所以用$2\pi$减去两个角得到第三个角,是因为误差。但其实不是这样的。对于第13个测试点,我把图画出来量出三个角大小并计算正弦值,与程序运行结果相差无几,但是做题的时候直接算确实不行,我们用下图…
Codeforces Beta Round #2 B. The least round way
除了最终结果为0的情况,末尾出现的零只能来自2和5的乘积。可以通过动态规划求出到终点经过数包含2和5作为因数的次数分别是多少,两者中的最小值就是末尾0的数目。 考虑图中有0的情况,如果经过这个点那么最终结果必定只有一个0,因此对他单独处理,只有不走0得到的最优解为0的情况下才不…
ICPC(2020)济南站 G. Xor Transformation 题解
比赛时思路是把$x$分两步变成$y$,第一步是把$x$二进制中与$y$重合的部分异或成和$y$一模一样的,第二步是把多出$y$的那一部分全部异或成$0$,这样就能保证每一次异或的都比当前$x$小。 之后看到题解,做法更简单。首先$y\neq 0$,因此$x\oplus y\ne…
Codeforces Round #664 (Div. 1) A. Boboniu Chats with Du 题解
取笑可以分为两种,一种不会被禁言(小于等于$m$),称之为$a$,一种会被禁言(大于$m$),称之为$b$。枚举用了多少$b$即可。 加入了两个优化:如果选的$b$太少,也就是说用选的这些$b$带来的禁言天数并不能把其他不想选的$b$全部覆盖掉,就跳过。如果选的$b$太多,在有…
Codeforces GYM102307 J. Jail Destruction 题解
两种操作:区间减和区间查询。 最初考虑用线段树维护区间和以及区间最小值。对于每次区间减$(al,ar,val)$,如果其中的一个区间最小值大于$val$,那就直接对该区间减去$val$,并打上懒标记,否则的话就单点修改。超时。 优化:如果一个元素$p$被减为$0$,就可以直接把…
关于公倍数
两个正整数a,b。设$g=gcd(a,b),h=lcm(a,b)=\frac{ab}{g}$。 假设存在两数的一个公倍数$l=k_1h+c(0<c<h)$。因为$h=\frac{ab}{g}$,且$b$为$g$的倍数,因此$l=k'a+c$,不是$a$的倍数…
Codeforces GYM102700 I. Incredible photography 题解
简单来说,就是在$i$左边找到第一个高于$a[i]$的楼(高度为$a[lp]$),若继续往左仍有高度为$a[lp]$的楼且该楼与$i$之间没有更高的楼阻挡,就继续往左取。对称地定义$rp$。 那么最优解就是在$a[lp],a[rp]$中取较矮的楼转移,若二者高度相同,则都进行转…
Codeforces GYM305690 G. Ice Cream 题解
二分时间。对于时间$ti$,在这期间要一刻不停的吃,因此将所有冰激凌减去融化的部分后,检查把剩下的部分全部吃完需要多长时间。
Codeforces GYM102307 G. Graduation 题解
一门课只能作为另外至多一门课的先修课,将每一门课作为一个节点,从一门课连一条有向边到其先修课,那么必定构成一个森林。问题就转化为给定一棵树,每次取$k$个叶结点,问多少次可以取完。注意一个叶结点被取过之后他的父亲节点并不能马上变为叶结点,要等取完这一轮才可以(因为修完$x$的先…
HDU 3829 Cat VS Dog 题解
最后所有开心的人当中,对于任意一对a,b,必定满足a喜欢的不是b讨厌的且b喜欢的不是a讨厌的。如果在喜欢和讨厌矛盾的人之间连边,就可以转化为最小点覆盖问题。要想开心的人最多,就要用最少的点消除掉所有的矛盾边。每消掉一条矛盾边得到的最优结果必定会产生一人开心一人不开心,矛盾连边跑…
Codeforces Round #676 (Div. 2) 题解
假设$a<b$,且$a$有$m$位,$b$有$n$位。那么$x$的位数必定小于等于$m$。$x$中超过$m$位的数字不可能令答案变得更小,因为超过$m$位要想让答案更小,只能异或掉$b$的一个$1$,那么$x$的该位必然是$1$,这样就会让$a$在此增加一个$1$,答…
P2853 题解
一个牧场如果能被所有牛都访问到,就可以贡献一个答案。 最初想法是从每个有牛的牧场开始dfs,碰到有牛的牧场就“带上这只牛”,并把该牧场变成没有牛的牧场。但是这样做不好处理有环的情况,因为很难维护两次访问起点之间“带上了多少牛”。 退而求其次,碰到一只陌生的牛不带它,只将能够到达…
P3916 题解
对于一个DAG,可以通过记忆化搜索得到答案。从每一个没有被访问过的点(即ans值为0)开始搜索,不断更新ans数组即可,如果搜到一个ans值不为0的点,那么直接用其ans值更新当前点的ans,不需要再搜一遍。 但是如果出现环,按照原先的搜索方式没法找到一个环中编号最大的点。因为…
P3387 题解(Tarjan强连通分量缩点模板)
对于一个强连通分量,最优解是把上面的所有点都走一遍,因为不存在负权点。所以可以通过缩点统计每个强连通分量的权值之和。 记anss[u]为以节点u为终点的路径的最大权值。通过拓扑排序,对于任意入度为0的节点u,anss[u]已知,因为不存在其他能够到达u的点可以更新答案。入度不为…
P2392 题解
单独考虑一个学科,左右脑可以同时工作,那就尽量让他俩工作时间相近。设该学科所有题目之和为sum,那么就转化成让一个的工作时间尽量接近mid=sum/2,进而转化成01背包问题,其中一个脑子是背包,问用mid的时间最多能完整地完成多少工作。