链接 \(A : Villages: Landlines\) 做法一:将有交集的两个区间合并(显然若一个区间被覆盖可只建电塔使另一个区间被覆盖),两两相邻区间的最短距离的和即为最小值。 做法二:按发电站的位置向左右遍历,对于左边,按建筑区间的最右端位置排序,记录目前电力能到达的最左端,贪心更新,对于右边同理
链接 \(String\) 我必须立刻对串串使用 \(kmp\) ,并让 \(nxt_i\) 向 \(i\) 连边,于是可得一个森林。对于任意点 \(x\) ,若 \(y\) 是 \(x\) 的祖先或自身,则有 \(S_{1,y} = S_{x-y+1,x}\) ,满足条件 \(1,2\) 。考虑条件 \(3\) ,需满足 \(2y>x\) 且 \(2y\) 与 \(x\) 模 \(k\) 同余,前者可以
引入 单位根反演一般用于求一类 \(i \bmod k\) 的求和式,通过枚举 \(j \equiv i \pmod{k}\),将式子转化为 \(k\) 次单位根下的操作。这一般要求 \(k \mid (\mathrm{mod}-1)\)。通常会结合二项式定理使用。 单位根反演 在 FFT 中我们其实已经见过它了: \[[n\mid k] = \frac{1}{n} \su
传送门 思路 考虑如何判无解,也就是说所有循环移位的 LIS 长度均大于 \(n\)。 一个括号序列的结论突然出现:令 \(b_i = [p_i > n+1] - [p_i<n+1]\),那么 \(b\) 中恰好包含 \(n\) 个 \(1\),\(n\) 个 \(1\) 和 \(1\) 个 \(0\)。根据 Raney 引理的推论,其存在一个循环移位满足所有前缀和均
似乎没人写记忆化搜索的,我就来一波(当然,写动态规划也是可以的,毕竟记忆化搜索只是动态规划的递归形式,不过蒟蒻太菜了,只想到搜索,而没有一开始就想到动规)。 我们把加法转化成减法,开始分割数字 \(c\),枚举情况。由于 \(b\) 是十进制的,所以 \(c\) 的每一段都由一个或两个数字组成(把这一段
A 线段覆盖,求未覆盖长度 左端点排序,然后扫一遍 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define endl "\n" 5 #define mp make_pair 6 #define pb push_back 7 #define st first 8 #define nd second 9 #define pii pair<int, i
默认配置的发射功率:BLE_TX_POWER - 发射功率( 默认:LL_TX_POWEER_0_DBM (0dBm) ) 修改默认发射功率可以参考 CH579 CH573 CH582 config.h修改预编译配置 代码里面如果动态设置发射功率,可以使用下面这个函数 /** * @brief set tx power level * * @param power - tx power leve
传送门: 洛谷 CF696B Puzzles 首先在此感谢 @OneZzz6174 大佬提供的学术支持。 思路 对于一个节点 \(i\) 的期望时间戳,我们记为 \(f_i\)。 与其他题解所述相似,我们根据 \(i\) 的父亲节点和它的兄弟节点可以得到 \(f_i\)。 具体地,它的兄弟节点对它的贡献(也是从它的父亲走到它这个节
你谷 link 一道蛮模版的字符串题,只需要一步非常显然的转化。 首先思考如果无视四种操作该怎么做,如果将每一个点看成是一个字符,那么就是给定一个文本串,多个模式串,求每个模式串在文本串里出现几次,这显然是一个字符串的模板题,可以使用 AC 自动机,也可以使用诸如后缀数组、后缀树、后缀
https://www.luogu.com.cn/problem/P5485 跟着 ccz 大爷之前的题解顺序开题。 考虑写出每个点时间的一次函数表达式,和 \(y_i-y_n,i\in [1,n-1]\),那么就是要求 \(\max\{\min\{y_i-y_n\}\}\),最小值最大就二分。然后每次可以根据 \(x\) 的正负得到 \(k\le mi,k \ge mx\),判断 2 个区间
传送门 思路 令 \(p' = p^{-1}\),即 \(p'_{p_i} = i\),则原题等价于最小化 \(\sum |p'_{q_i} - q_{i+1}|\)。显然,当所有 \(i\) 都满足 \(p'_{q_i} = q_{i+1}\) 时原式取最小值,但这时 \(q\) 不一定是一个排列。容易发现,排列 \(q\) 给出了一个在 \(p'\) 形成的图上遍历的顺序,考虑 \(p'
比赛链接 2022“杭电杯”中国大学生算法设计超级联赛(1) 7149. Alice and Bob 有 \(a_i\) 个 \(i\)(\(0\leq i\leq n\)),\(Alice\) 每次可以将这些数划分为两个集合,\(Bob\) 每次可以删除一个集合,同时另外一个集合所有数减一。如果任何时候存在 \(0\) 则 \(Alice\) 胜,否则 \(Bob\) 胜
洛谷传送门 CF 传送门 题意 给一棵树和每个结点消失的概率 \(p_i\),有 \(q\) 组询问,每组询问要求: 将 \(p_u\) 修改为 \(x\) 查询森林的期望连通块数量 思路 题中给出的是每个结点消失的概率,那不妨先 \(p_i \gets 1 - p_i\) 将 \(p_i\) 转化为每个结点出现的概率。 众所周知森林连
宏 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 使用宏时是简单的代码段替换. #define的概念 简单的宏定义 #define <宏名> <字符串> 例: #define PI 3.1415926 注:使用简单的宏定义可以定义一些常
解题思路 n个小朋友 每人有任意个数字,从两个不同小朋友任意去一个数使得和大于k,问有多少种取法? 可以通过vector容器来方便的解决不同小朋友不同手牌的问题 通过对每个小朋友手牌以及所有手牌排序后二分作差,可以查到与该小朋友的另一取值共有多少种不同取法,然后相加得到 最后
题面传送门 我们发现强制第一个人在一号节点不影响答案,因此我们钦定第一个人在一号点然后答案乘\(n\)即可。 考虑本质要求什么。也就是说\([2,2],[3,4],[5,8]\dots [2^{n-1}+1,2^n]\)区间内的最小值都不在\(A\)中。 不在不好考虑,容斥变成至少有\(S\)集合内的点在这些区间的最小值
取$T=S_{i}$,不断删除其任意子串$\in \{S_{j}\mid i\ne j\}$,最终应有$T\in \{S_{i},\empty\}$ 关于该过程的实现,考虑建立AC自动机,并从前往后依次加入字符 若当前节点存在后缀为某子串,则删去该后缀,并跳到剩余部分对应位置 若$T=\empty$,则删除$S_{i}$可以以该过程代替,不妨去掉$S_{i
Codeforces Round #808 (Div. 1)(A~C) A:Doremy's IQ 题目大意 给你一个序列,然后你从左到右可以选择弄或者不弄。 然后你有一个智商值,如果你当前弄的数小于等于它就无影响,否则智商值减一,如果变成了 \(0\) 就无法操作。 要你最大化弄的次数,并构造方案。 思路 小溪了这题就卡了半天。
Codeforces Round #807 (Div. 2) C(模拟) 题意 对一个字符串不断做拼接操作,最后得到一个很长的串,回答终串的某个位置是什么 思路 倒着模拟过程,将坐标不断回退。 先根据长度找到下标第几次操作,再退回到该操作作用的状态。 #include<iostream> #include<cstdio> #include<cstring> #in
题面传送门 首先根据期望的线性性,我们可以求出每一个完美匹配出现的概率然后求和即为完美匹配个数的期望。 显然的,我们可以设\(dp_{a,b}\)表示左部点选择了\(a\)集合内的点,右部点选择了\(b\)集合内的点在完美匹配中的概率。加入\(op=0\)的边以后,分这条边出现和不出现两种情况。而
题目链接: Problem - H - Codeforces 题意: 给定一个数组,找出第一个比q[i]大的数q[j]记录数据输出 分析: 对于一个任意的q[i]来说,若i<j且q[i]<q[j]那么答案一定不会在j后面出现,若i<j且q[i]>q[j]答案也不会在j后小于q[j]的元素中出现,所以对于每个元素可以删除其后面的元素,使用栈倒序操
[USACO06JAN]The Cow Prom S 题目描述 有一个 \(n\) 个点,\(m\) 条边的有向图,请求出这个图点数大于 \(1\) 的强联通分量个数。 输入格式 第一行为两个整数 \(n\) 和 \(m\)。 第二行至 \(m+1\) 行,每一行有两个整数 \(a\) 和 \(b\),表示有一条从 \(a\) 到 \(b\) 的有向边。 输出格式
在上面一张我们在一个基础IO外设上加上了定时器功能,但是在设备驱动挂载完成后直接就运行定时器了,这样肯定是不行的。一定是需要一个APP程序和底层驱动进行交互。APP起码具备的功能有启动、停止定时器,修改定时器工作周期的功能。 在前面所有的APP中我们主要用了file_operations结构
引用文献链接: 最短路 - OI Wiki (oi-wiki.org) 链式前向星 优先队列的使用方法(自定义排序) 最短路 - Bulbul 最短路 - SugarT 最短路题单: 最短路分类及时间复杂度: 松弛操作: 以下为官方解释(非人话解释): 以下为人话解释 Floyd算法 是用来求任意两个结点之间的最短
考虑维护包含前$i$个点的最小圆,并不断加入下一个点—— 若加入的点被该圆包含,显然答案不变,否则该点必然在新的最小圆边界上 换言之,此时得到了一个确定边界上某点的子问题,并用类似的方式处理 以此类推,当第$3$轮中出现此情况时,即得到了圆边界上的三点,进而解出该圆 具体的,以距离圆心