Codeforces Round #683 (Div. 1) Solution
A. Knapsack
猜个结论——先把所有的东西加起来,如果小于 \(\frac{1}{2}m\) 就输出不合法;如果在 \([\frac{1}{2}m, m]\)之间直接全部输出;若大于 \(m\),那就想办法把他减到 \(m\) 以下并且大于等于 \(\frac{1}{2}m\),那么问题就转化为了求序列减完以后大于等于 \(\frac{1}{2}m\) 的情况下的最小值。那我们排个序,从大到小循环,把当前能减的都减掉就是了。
for (int i = n; i; i--)
{
//fout << '$' << p[i] << ' ' << a[p[i]] << ' ';
if ((sum - a[p[i]]) * 2 >= W)
{
sum -= a[p[i]];
used[p[i]] = false;
}
}
B. Catching Cheaters
又是一个巧妙的序列 DP。设 \(f_{i,j}\)表示 \(a\) 中选出的子段以 \(i\) 结尾、\(b\) 中选出的子段以 \(j\) 结尾的最大相似值。为什么可以这么设状态呢?因为我们根本不关心前面是什么样子的,我只想知道截止 \((i-1,j-1)\) 这个位置的最大相似值,并且这个东西满足最优子结构。状态转移方程:
\]
这个东西思考起来很困难,因为总感觉这个和两个序列所选段的起始点有关;仔细想想,其实是无关的。
C. Xor Tree
假设留下了 \(k\) 个点,则一共 \(k\) 条边,要构成一个可以有重边的树,那么它合法当且仅当这个重边唯一,即 \(j\) 是 \(i\) 要找的点且 \(i\) 是\(j\) 要找的点,这样的点对唯一。
最少扣掉几个数转化为最多留下几个数。把原序列搞到 0/1 Trie 上,设 \(f_x\) 表示 \(subtree(x)\) 中最多留下几个点。如何转移?我们发现,若它的其中一颗子树的 \(size > 1\),那么这颗子树一定是自己内部全连完;若它两颗子树的 \(size_1\) 都大于 1,那么这颗树就断开了。所以状态转移方程为 \(f_x = max(f_{ls},f_{rs})+1\),若只有一个孩子就直接等于。可以证明这样是充分必要的。
Codeforces Round #683 (Div. 1) Solution的更多相关文章
- Codeforces Round #466 (Div. 2) Solution
从这里开始 题目列表 小结 Problem A Points on the line Problem B Our Tanya is Crying Out Loud Problem C Phone Nu ...
- 老年OIer的Python实践记—— Codeforces Round #555 (Div. 3) solution
对没错下面的代码全部是python 3(除了E的那个multiset) 题目链接:https://codeforces.com/contest/1157 A. Reachable Numbers 按位 ...
- Codeforces Round #545 (Div. 1) Solution
人生第一场Div. 1 结果因为想D想太久不晓得Floyd判环法.C不会拆点.E想了个奇奇怪怪的set+堆+一堆乱七八糟的标记的贼难写的做法滚粗了qwq靠手速上分qwqqq A. Skyscraper ...
- Codeforces Round 500 (Div 2) Solution
从这里开始 题目地址 瞎扯 Problem A Piles With Stones Problem B And Problem C Photo of The Sky Problem D Chemica ...
- Codeforces Round #607 (Div. 1) Solution
从这里开始 比赛目录 我又不太会 div 1 A? 我菜爆了... Problem A Cut and Paste 暴力模拟一下. Code #include <bits/stdc++.h> ...
- Codeforces Round #578 (Div. 2) Solution
Problem A Hotelier 直接模拟即可~~ 复杂度是$O(10 \times n)$ # include<bits/stdc++.h> using namespace std; ...
- Codeforces Round #683 (Div. 2, by Meet IT)【ABCD】
比赛链接:https://codeforces.com/contest/1447 A. Add Candies 题意 \(1\) 到 \(n\) 个袋子里依次有 \(1\) 到 \(n\) 个糖果,可 ...
- Codeforces Round #525 (Div. 2) Solution
A. Ehab and another construction problem Water. #include <bits/stdc++.h> using namespace std; ...
- Codeforces Round #520 (Div. 2) Solution
A. A Prank Solved. 题意: 给出一串数字,每个数字的范围是$[1, 1000]$,并且这个序列是递增的,求最多擦除掉多少个数字,使得别人一看就知道缺的数字是什么. 思路: 显然,如果 ...
随机推荐
- FastAPI 学习之路(五十四)startup 和 shutdown
我们在实际的开发中呢,总会遇到这样的场景,我们想在启动或者终止的时候,做一些事情,那么应该如何实现呢,其实也是很简单.fastapi提供了这样的操作. 那么我们看下具体是怎么实现的呢 app = Fa ...
- 机器学习:EM算法
EM算法 各类估计 最大似然估计 Maximum Likelihood Estimation,最大似然估计,即利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值的计算过程. 直白来讲,就 ...
- UltraSoft - Beta - Postmortem事后分析
UltraSoft - Beta - PostMORTEM 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题和定义都在[软软软]功能规格说明书 ...
- makedown笔记
makedown语法 表格 这个表格的主题 |姓名|性别|年龄|职业| | ----- | ----- | ----- | ----- | |张三|男|34|码农| |李四|男|27|代驾| 这个表格 ...
- 深度解析HashMap集合底层原理
目录 前置知识 ==和equals的区别 为什么要重写equals和HashCode 时间复杂度 (不带符号右移) >>> ^异或运算 &(与运算) 位移操作:1<&l ...
- Hash算法:双重散列
双重散列是线性开型寻址散列(开放寻址法)中的冲突解决技术.双重散列使用在发生冲突时将第二个散列函数应用于键的想法. 此算法使用: (hash1(key) + i * hash2(key)) % TAB ...
- HTML bootstrap 模态对话框添加用户
HTML 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> ...
- 用STM32定时器中断产生PWM控制步进电机
控制步进电机可以使用PWM.定时器中断.延时,这里用的就是定时器中断来让它转动. 一.硬件部分1.使用的硬件板子用的是正点原子的STM32F103 mini板,驱动器是DM420(DM420驱动器资料 ...
- lvs 四层负载相关
都打开 /etc/sysctl.conf 中的 net.ip4.ip_forward=1.开启路由转发功能. 分发器 : eth0:192.168.1.66 (VIP) eth1:192.168.2. ...
- 【mysql1】如何删除MySQL内存|不再跟新系列
完全卸载mysql的具体步骤: 包括停止服务 + 卸载相关程序 + 删除注册表等等 步骤一: windows键+R-->Control-->程序和功能:所有MySQL程序点击右键 ...