【OJ】UOJ
文章平均质量分 81
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【UOJ528】【美团杯2020】分形之美
题目链接点击打开链接题目解法观察分形结构,我们可以得到如下性质:(1)(1)(1) 、分形结构具有轴对称性,且 Ai,j=Aj,iA_{i,j}=A_{j,i}Ai,j=Aj,i(2)(2)(2) 、对于每一个 3×33\times 33×3 的单元,中间的元素为 111 ,其四周的元素为 000 ,角落上的元素均相同(3)(3)(3) 、任何情况下不存在相邻的 x ,每一个大小超过 111 的 o 连通块均与一个一级的 o 直接相邻考虑计算 solve(N,xl,xr,yl,yr)sol原创 2020-05-19 14:19:47 · 480 阅读 · 0 评论 -
【UOJ530】【美团杯2020】汉明距离
题目链接点击打开链接题目解法在解决本题之前,首先考虑如下问题:在数轴原点处,一个人开始随机游走,每一时刻,他将以 12\frac{1}{2}21 的概率向正方向走一步,以相同的概率向负方向走一步。求出 NNN 时刻后他所在坐标平方的期望。考虑用动态规划解决该问题,记 dpi,jdp_{i,j}dpi,j 表示从 iii 号点出发, jjj 时刻后角色所在坐标平方的期望。则有:dpi,j={i2j=0dpi+1,j−1+dpi−1,j−12j≥1dp_{i,j}=\left\{\begin{原创 2020-05-19 13:23:24 · 621 阅读 · 0 评论 -
【UOJ532】【美团杯2020】热身题
题目链接点击打开链接题目解法从长到短搜索题目给出的上升序列。每填入一个数字,便检查是否有能够确定的位置,并在产生矛盾时进行剪枝。时间复杂度 O(1)O(1)O(1) 。#include<bits/stdc++.h>using namespace std;const int N = 15;typedef long long ll;template <typename T> void chkmax(T &x, T y) {x = max(x, y); }te原创 2020-05-18 13:09:27 · 389 阅读 · 0 评论 -
【UOJ531】【美团杯2020】最长公共子序列
题目链接点击打开链接题目解法询问长度为 222 的序列 {x,y} (x≠y)\{x,y\}\;(x\ne y){x,y}(x=y) 可以查询 xxx 是否在答案中排在 yyy 的前面。由此,用 std :: stable_sort 或是归并排序对 111 到 NNN 进行排序即可。时间复杂度 O(NLogN)O(NLogN)O(NLogN) 。#include "lcs.h"#include <bits/stdc++.h>using namespace std;cons原创 2020-05-18 13:08:24 · 436 阅读 · 0 评论 -
【UOJ529】【美团杯2020】114514
题目链接点击打开链接题目解法可以发现,在给定的序列 114514114514114514 中,每个 444 之前均有一个 111 。因此,从后向前,将每个 444 与前方最近的一个尚未匹配的 111 匹配,不会导致原本有解的数据无解。进行匹配后,每一个 1−41-41−4 结构的左右端点是分别具有单调性的。那么,剩余的问题就是将给定序列拆分为形如 123212321232 的序列。从左到右进行简单贪心即可,对于一个 222 ,我们会优先将其与 111 匹配。单组数据时间复杂度 O(∣S∣)O原创 2020-05-18 13:07:54 · 606 阅读 · 0 评论 -
【UOJ525】【美团杯2020】平行四边形
题目链接点击打开链接题目解法考虑不存在平行四边形的判断条件,则应当为:对于任意 (i≠j)(i\ne j)(i=j) , Pi−PjP_i-P_jPi−Pj 得到的向量两两不同。注意到题目保证了 N+1N+1N+1 是质数,不妨猜想构造方式与原根 ggg 有关。考虑如下构造:Pi=(i,gi%N)P_i=(i,g^i\% N)Pi=(i,gi%N)则Pi−Pj=(i−j,gj(gi−j−1)%N)P_i-P_j=(i-j,g^j(g^{i-j}-1)\% N)Pi−Pj=(i原创 2020-05-18 13:07:18 · 290 阅读 · 0 评论 -
【UOJ524】【美团杯2020】程序解密
题目链接点击打开链接题目解法利用编辑器的替换功能不难得到大致的程序。对于剩余不能确定的部分,枚举所有可能的情况,根据样例判断是否正确即可。值得关注的突破口有:右大括号、回车、Tab,以及出现了一部分的保留字。#include<bits/stdc++.h>const int MAXN = 1e3 + 5;using namespace std;int weight[] = {293309062, 96701749, 694916487, 371591203, 450903345,原创 2020-05-18 13:06:46 · 464 阅读 · 0 评论 -
【UOJ523】【美团杯2020】半前缀计数
题目链接点击打开链接题目解法对于一个所求集合内的子串 TTT ,定义其关键出现位置 (i,j,k)(i,j,k)(i,j,k) ,满足 Lcp(S,T)=iLcp(S,T)=iLcp(S,T)=i 。那么,可以枚举前缀 iii ,统计后缀 i+1i+1i+1 中,不以 Si+1S_{i+1}Si+1 开头的本质不同的子串个数,求和得到答案。因此,我们需要实现一个数据结构,支持向其开头加入一个字符,并询问不以某一特定字符开头的,本质不同的子串个数。用后缀自动机简单实现即可。时间复杂度 O(∣S∣)原创 2020-05-18 13:06:13 · 450 阅读 · 0 评论 -
【UOJ522】【美团杯2020】版本答案
题目链接点击打开链接题目解法关于鲭鱼圣者的之间的战斗,有如下观察:(1)(1)(1) 、在任意时刻,双方阵营中没有圣盾的鲭鱼圣者数量不超过 111(2)(2)(2) 、进攻方的鲭鱼圣者 xxx 进攻后,其余鲭鱼圣者均会重新获得圣盾(3)(3)(3) 、防守方在被进攻前,或是所有鲭鱼圣者均有圣盾,或是刚刚行动的鲭鱼圣者没有圣盾因此,我们可以使用四元组 (x,y,s,t)(x,y,s,t)(x,y,s,t) 来描述一个状态,表示:(1)(1)(1) 、当前进攻方剩余鲭鱼圣者的数量为 xxx ,防原创 2020-05-18 13:05:43 · 666 阅读 · 0 评论 -
【UOJ519】【美团杯2020】查查查乐乐
题目链接点击打开链接题目解法考虑判断某序列是否可以选出子序列 S=xxxllS=xxxllS=xxxll 。则应当从左到右考虑序列个每个元素 xxx ,并维护匹配指针 pospospos ,若 x=Sposx=S_{pos}x=Spos ,则令 pos=pos+1pos=pos+1pos=pos+1 ,判断最后 pospospos 是否为 666 即可。因此,不难发现,对于一个序列,只需要保存 pospospos 作为状态就可以了。由此设计动态规划解决问题即可。时间复杂度 O(T×N)O(T\原创 2020-05-18 13:05:03 · 341 阅读 · 0 评论 -
【BZOJ5152】【UOJ347】【WC2018】通道
【题目链接】BZOJ UOJ【思路要点】首先,我们来考虑只有两棵树的情况。 我们枚举两个点在第一棵树上的LCA,那么这两个点应该位于LCA的不同的子树中,点对\((x,y)\)的价值应当为\(deptha_x+deptha_y-2*deptha_{Lca}+distb(x,y)\)。 对于第二棵树上的每一个点\(x\),新建\(x'\)与其相连,边权为\(deptha_x\...原创 2018-06-07 15:05:10 · 510 阅读 · 0 评论 -
【BZOJ5153】【UOJ348】【WC2018】州区划分
【题目链接】BZOJUOJ【思路要点】定义\(sum_S\)表示集合\(S\)包含的城市人口总数的\(p\)次方。定义\(g_S\),当\(S\)是一个合法的州区,\(g_S=sum_S\),否则\(g_S=0\)。定义\(f_S\)表示\(S\)所有可行的州区划分的方案的满意度之和。那么\(f_S=\sum_{T\subseteq S,T\ne\emptyset}\frac{g_T*f_{S-T...原创 2018-06-06 18:45:26 · 497 阅读 · 0 评论 -
【BZOJ4943】【UOJ315】【NOI2017】蚯蚓
【题目链接】BZOJUOJ【思路要点】先说做法:用链表模拟蚯蚓的队列。对于每一个1号操作,计算所有新增的,长度在50以内的子串的哈希值,并加入哈希表中。对于每一个2号操作,计算所有被切断的,长度在50以内的子串的哈希值,并在哈希表中除去。对于每一个3号操作,计算每个子串的哈希值,并在哈希表中找到它们的出现次数,并相乘得到答案。显然,2号操作的总复杂度为\(O(CK^2)\),3号操作的总复杂度为\...原创 2018-05-30 20:32:43 · 385 阅读 · 0 评论 -
【BZOJ4942】【UOJ314】【NOI2017】整数
【题目链接】BZOJUOJ【思路要点】用线段树模拟整数的加减,通过维护区间信息和区间赋值来实现快速进/退位。具体而言,在每个节点维护该区间是否全为0/1,以及区间赋值懒标记。进行加/减法时现在对应位上进行操作,若涉及进/退位,则在线段树上二分出最近的更高位的0/1,对其进行操作,并将操作位置和该位置之间的区间赋值为1/0。进行压位,进制变为\(2^{30}\)。时间复杂度\(O(NLogN)\)。...原创 2018-05-30 18:09:03 · 386 阅读 · 0 评论 -
【BZOJ4653】【UOJ222】【NOI2016】区间
【题目链接】BZOJUOJ【思路要点】将区间按照长度排序,一系列区间\([l_x,r_x],[l_{x+1},r_{x+1}]...[l_y,r_y]\)中可以选出一组合法的解当且仅当被这些覆盖次数最多的点被覆盖了至少\(M\)次。我们希望使得\(x\)和\(y\)尽可能接近,不难发现,\(y\)是关于\(x\)单调的,因此可以使用Two Pointers求出每一个\(x\)对应的最近的\(y\)...原创 2018-05-29 20:14:22 · 186 阅读 · 0 评论 -
【BZOJ4650】【UOJ219】【NOI2016】优秀的拆分
【题目链接】BZOJUOJ【思路要点】定义前后一半相同的字符串为优秀的字符串,记\(pre_i\)表示以\(i\)结尾的优秀的字符串的个数,\(suf_i\)表示以\(i\)开头的优秀的字符串的个数。则答案为\(\sum_{i=1}^{N-1}pre_i*suf_{i+1}\)。显然\(pre\)和\(suf\)的处理方式类似,考虑如何计算\(pre\)。考虑枚举所求的优秀的字符串长度的一半\(i...原创 2018-05-29 18:19:56 · 266 阅读 · 0 评论 -
【BZOJ5415】【UOJ393】【NOI2018】归程
【题目链接】 BZOJ UOJ 【思路要点】 KruskalKruskalKruskal 重构树上倍增。 时间复杂度 O(NLogN+QLogN)O(NLogN+QLogN) O(NLogN+QLogN) 。 【代码】 #include<bits/stdc++.h>using namespace std;cons...原创 2018-09-11 14:23:45 · 207 阅读 · 0 评论 -
【BZOJ4651】【UOJ220】【NOI2016】网格
【题目链接】BZOJUOJ【思路要点】当且仅当跳蚤个数不足两个,或跳蚤个数为两个,并且他们位置相邻,答案为-1。否则,当且仅当原本跳蚤中存在不连通的跳蚤,答案为0。否则,当且仅当原图中存在割点,答案为1。否则答案为2。将整张图建出来,依次检验以上判断标准,可以得到一个时空复杂度为\(O(N*M)\)的做法。我们发现\(N\)和\(M\)均很大,而\(C\)很小,这意味着存在大面积的空白,考虑只考虑...原创 2018-05-29 17:41:56 · 361 阅读 · 0 评论 -
【BZOJ4945】【UOJ317】【NOI2017】游戏
【题目链接】BZOJUOJ【思路要点】考虑若不存在“x”,那么剩余的问题就是一个2-SAT的基本问题。不妨令字符串中仅包含c,显然其他的问题是对称的。限制(x,A,y,A):连接(x,A)->(y,A),(y,B)->(x,B)。限制(x,A,y,B):连接(x,A)->(y,B),(y,A)->(x,B)。限制(x,A,y,C):连接(x,A)->(y,A),(x,...原创 2018-05-31 19:31:35 · 273 阅读 · 0 评论 -
【BZOJ4946】【UOJ318】【NOI2017】蔬菜
【题目链接】BZOJUOJ【思路要点】考虑只有一组询问。我们可以计算出某种蔬菜最后变质的时间\(f_i\),将这种蔬菜拆分成\(f_i\)或\(f_i+1\)份,前\(f_i-1\)份质量为\(x_i\),价格为\(a_i\),在第1、2……\(f_i-1\)天后就会腐烂;第\(f_i\)份质量为1,价格为\(a_i+s_i\),在第\(f_i\)天后就会腐烂;若还有剩余,剩余的分为一份,价格为\...原创 2018-06-01 16:05:21 · 529 阅读 · 0 评论 -
【BZOJ4944】【UOJ316】【NOI2017】泳池
【题目链接】BZOJ UOJ【思路要点】考虑对于已知网格,如何计算最大的安全区域的面积。 我们会选用笛卡尔树。 因此,我们考虑枚举区间最小值的位置,进行笛卡尔树DP。 设\(dp_{i,j,0}(i*j≤k)\)表示当前考虑的部分宽度为\(j\),且靠近沙滩的\(i*j\)个格子被确认是安全的情况下最大安全面积恰好为\(k\)的概率。 设\(dp_{i,j,1}(i*j...原创 2018-06-20 15:10:38 · 546 阅读 · 0 评论 -
【UOJ188】【UR #13】Sanrd
【题目链接】 点击打开链接 【思路要点】 令f(x)f(x)f(x)表示xxx次大的质因子,那么答案即为∑ri=lf(i)∑i=lrf(i)\sum_{i=l}^{r}f(i),也就是说我们要求的实际上是∑Ni=1f(i)∑i=1Nf(i)\sum_{i=1}^{N}f(i)。 考虑从小到大枚举每一个质因子,最后第二个被枚举到的质因子即为f(x)f(x)f...原创 2018-08-10 20:04:13 · 671 阅读 · 0 评论 -
【BZOJ5417】【UOJ395】【NOI2018】你的名字
【题目链接】 BZOJ UOJ 【思路要点】 对 SSS 用后缀自动机建后缀树,并在其 DFSDFSDFS 序上建立主席树。 考虑一个询问 (T,ql,qr)(T,ql,qr)(T,ql,qr) ,从后到前依次考虑其每一个后缀对答案的贡献,显然对于每一个后缀 iii ,存在一个长度 lenlenlen ,当且仅当 j>i+lenj>i+le...原创 2018-09-11 14:04:31 · 645 阅读 · 0 评论 -
【BZOJ5418】【UOJ396】【NOI2018】屠龙勇士
【题目链接】 BZOJ UOJ 【思路要点】 用 exgcdexgcdexgcd 合并每一步的结果。 时间复杂度 O(NLogN)O(NLogN) O(NLogN) 。 【代码】 #include<bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 5...原创 2018-09-11 14:32:33 · 252 阅读 · 0 评论 -
【BZOJ5416】【UOJ394】【NOI2018】冒泡排序
【题目链接】 BZOJ UOJ 【思路要点】 首先,当且仅当一个排列不含有长度为 333 的下降子序列,冒泡排序的交换次数取到下界。 证明:一个排列不含有长度为 333 的下降子序列等价于不存在一个位置前面有更大的数并且后面有更小的数。由于这样的位置一定会被向前/向后各交换一次,因此含有长度为 333 的下降子序列的排列交换次数取不到下界;其余的排列可...原创 2018-09-11 20:25:16 · 342 阅读 · 2 评论 -
【UOJ455】【UER #8】雪灾与外卖
【题目链接】点击打开链接【思路要点】首先判断是否无解,以下讨论默认问题有解。令 ∞\infty∞ 为一个足够大的数,对于送餐员 XiX_iXi ,在 Xi−∞X_i-\inftyXi−∞ 处增加 111 个餐馆,令所有送餐员初始时与其对应的餐馆匹配,即初始时 Ans=N∗∞Ans=N*\inftyAns=N∗∞ 。从左到右考虑每一个元素,加入当前的考虑集合。若加入元素为...原创 2019-01-28 14:36:00 · 1040 阅读 · 0 评论 -
【UOJ77】A + B Problem
【题目链接】点击打开链接【思路要点】最小割,考虑在为每个元素 iii 在源汇之间建点 pointi,0point_{i,0}pointi,0 ,连边 (s,pointi,0,bi),(t,pointi,1,wi)(s,point_{i,0},b_i),(t,point_{i,1},w_i)(s,pointi,0,bi),(t,pointi,1,wi) ,此时的最小割即为...原创 2019-07-04 13:46:25 · 308 阅读 · 0 评论 -
【BZOJ3812】【UOJ37】【清华集训2014】主旋律
【题目链接】BZOJUOJ【思路要点】我们希望求出使得图强联通的边集数,这等价于求出所有边集数减去使得图不强连通的边集数。首先考虑一种非常暴力的做法,我们枚举最终的图缩点后的情况。那么,剩下的图必须是一个DAG,我们希望求出这张图在是DAG的情况下可行的边集数,并与每一个强连通分量加边方案数相乘,得到答案。后面的这个问题是原问题的一个子问题,递归对对应强联通分量的导出子图求解即可。问题在于求解一张...原创 2018-02-27 13:37:25 · 1274 阅读 · 0 评论 -
【BZOJ4200】【UOJ132】【NOI2015】小园丁与老司机
【题目链接】BZOJUOJ【思路要点】将所有点按照纵坐标排序,分别处理同一纵坐标的点。显然,每个点在各个方向上的后继点若存在,是唯一的,先预处理。记\(f_i\)表示从节点\(i\)出发,能够经过的最多的点数。若不考虑左右的移动,\(f_i\)就是\(i\)在三个方向上后继结点的\(f\)值的最大值加1,记这个值为\(tmp_i\)。不妨令同一纵坐标的点横坐标递增,那么有\(f_i=max\{tm...原创 2018-05-28 16:57:53 · 545 阅读 · 0 评论 -
【BZOJ5077】【UOJ198】【CTSC2016】时空旅行
【题目链接】BZOJUOJ【思路要点】我们发现所有星球的\(y\)和\(z\)坐标没有实质作用,问题仅和\(x\)和\(c\)有关。令询问给出的横坐标为\(qx\),那么一个属性为\((x,c)\)的星球被探索的代价为\((qx-x)^2+c=qx^2-2x*qx+(x^2+c)\)。显然\(qx^2\)只和询问有关,因此我们需要求\(-2x*qx+(x^2+c)\)的最小值,令\(k=-2x,b...原创 2018-06-04 13:38:24 · 285 阅读 · 0 评论 -
【BZOJ4199】【UOJ131】【NOI2015】品酒大会
【题目链接】BZOJUOJ【思路要点】建立母串的后缀树,分别考虑每一条树边上所有的字符串。假设该树边指向节点\(x\),其子树内后缀结尾数为\(Size_x\),表示的字符串长度为\(Depth_i\)。那么这条边上的字符串会对满足\(r\in(Depth_{father},Depth_x]\)的\(r\)的答案产生\(\binom{Size_x}{2}\)的贡献。DFS一遍,然后差分+前缀和即可...原创 2018-05-27 16:01:29 · 204 阅读 · 0 评论 -
【BZOJ3669】【UOJ3】【NOI2014】魔法森林
【题目链接】BZOJUOJ【思路要点】对边的权值\(A\)排序,依次加入图中,用LinkCutTree维护权值\(B\)的最小生成树。时间复杂度\(O(MLogN)\)。【代码】#include<bits/stdc++.h>using namespace std; #define MAXN 50005#define MAXM 100005#define INF 1e9stru...原创 2018-02-28 18:26:04 · 224 阅读 · 0 评论 -
【BZOJ3668】【UOJ2】【NOI2014】起床困难综合症
【题目链接】BZOJUOJ【思路要点】从高位向低位贪心即可,遵从“使答案最大的情况下花费最小”的原则。时间复杂度\(O(NLogM)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;const int MAXLOG = 30;template <typename T> ...原创 2018-02-28 18:15:29 · 283 阅读 · 0 评论 -
【BZOJ3816】【UOJ41】【清华集训2014】矩阵变换
【题目链接】BZOJUOJ【思路要点】首先我们需要了解一下“稳定婚姻问题”。给出\(N\)个男孩,\(N\)个女孩。每个男孩对所有女孩有一个序关系,表示他对女孩的喜好程度。每个女孩也对所有男孩有一个序关系,表示她对男孩的喜好程度。定义一个稳定匹配为满足下列性质的完备匹配:不存在一个男孩和一个女孩,他们没有配对,但互相喜欢对方胜过自己的配偶。稳定匹配一定存在。下面给出一种\(O(N^2)\)寻找稳定...原创 2018-02-28 14:27:41 · 514 阅读 · 0 评论 -
【BZOJ3240】【UOJ124】【NOI2013】矩阵游戏
【题目链接】BZOJUOJ【思路要点】直观地来想,本题可以用矩阵乘法优化递推来实现。但是进制转换并不方便,所以,我们考虑不记录一个方阵的\(2^i\)次方,转而记录一个方阵的\(10^i\)次方,这样就不需要进制转换了。时间复杂度\(O(|N|+|M|)\),由于常数很大,实现时可能需要一定的常数优化。【代码】#include<bits/stdc++.h>using namespac...原创 2018-03-08 12:55:53 · 309 阅读 · 1 评论 -
【BZOJ3815】【UOJ40】【清华集训2014】卡常数
【题目链接】BZOJUOJ【思路要点】加密方式对实数是单调的,可以通过二分来解密。然后,大概就是一道KD-Tree基础题了。由于数据随机,并不需要加入替罪羊树式的重构,直接暴力插入即可。时间复杂度\(O(M\sqrt{N})\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 65536 + 5;co...原创 2018-02-28 12:50:18 · 574 阅读 · 0 评论 -
【BZOJ3814】【UOJ39】【清华集训2014】简单回路
【题目链接】BZOJUOJ【思路要点】直接进行\(Q\)次基于连通性的动态规划可以获得60分。注意到一定需要经过的边只有竖直的,而没有水平的。我们可以在完成一行的动态规划时顺便记录在第1行到第\(i\)行的区域中,第\(i\)行的插头为\(Mask\)的方案数以及第\(i\)行到第\(N\)行的区域中,第\(i\)行的插头为\(Mask\)的方案数。在询问时将经过某条边的配对的插头对应的方案数相乘...原创 2018-02-28 08:45:53 · 558 阅读 · 0 评论 -
【BZOJ3813】【UOJ38】【清华集训2014】奇数国
【题目链接】BZOJUOJ【思路要点】首先,有一个直观的做法是对每一个质因子维护一棵树状数组,记录区间中该质因子指数的和。询问时先将\(product\)质因数分解的结果求出来,再用快速幂计算欧拉函数。时间复杂度是\(O(60NLogN)\),可以在UOJ上通过,但在BZOJ上会超时。进一步考虑,由于19961993是质数,我们可以方便地计算各个质因数的乘法逆元。所以我们用一颗线段树维护区间取模乘...原创 2018-02-27 09:55:19 · 358 阅读 · 0 评论 -
【BZOJ3811】【UOJ36】【清华集训2014】玛里苟斯
【题目链接】BZOJUOJ【思路要点】首先,数集\(\{A,B\}\)等价于数集\(\{A,A\ Xor\ B\}\),且数集\(\{A,0\}\)等价于\(\{A\}\)。因此,我们可以先构建原数集的线性基,并删去多余的0。令\(M\)为线性基的元素个数,则\(M\)是\(O(LogMax\{a_i\})\)级别的。注意到题目保证答案小于等于\(2^{63}\),那么\(Max\{a_i\}\)...原创 2018-02-26 16:17:04 · 444 阅读 · 0 评论 -
【UOJ169】【UR #11】元旦老人与数列
【题目链接】点击打开链接【前置阅读】【BZOJ4355】Play with Sequence【BZOJ3064】【TYVJ1518】CPU监控【思路要点】前置阅读中的两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们需要将它们整合起来。支持区间取原创 2018-01-25 16:22:49 · 786 阅读 · 0 评论