杂项
文章平均质量分 64
OI 中一些零碎算法有关题目。
Plozia
这个作者很懒,什么都没留下…
展开
-
杂项专题-学习笔记:模拟退火
模拟退火的学习笔记。原创 2022-01-29 13:55:28 · 865 阅读 · 0 评论 -
CF1516D Cut 题解
一道套路题,做过同类型的题目应该能够直接看出做法。这道题首先询问方式很像 DS 题的询问方式,但是实际上你会发现这道题做法是不能纯 DS 的,或者说这道题根本就不需要 DS。发现如果乘积和 LCM 要相同的话需要满足这个区间内没有任意两个数最大公约数大于 1,而最大公约数可以归约到质因数上。所以首先对每个数做一个质因数分解,然后考虑预处理出 rir_iri 表示第 iii 个位置不断往右边扩展,能够扩展到的最右边的位置是什么,满足 [i,ri][i,r_i][i,ri] 合法,且 [i,ri+1]原创 2021-09-09 19:44:26 · 201 阅读 · 0 评论 -
CF1343E Weights Distributing 题解
一道思维题。首先我们可以发现实际上我们如果能够在 a→b→ca \to b \to ca→b→c 上的路径上将总和排的尽量小那么一定是最优的。于是我们可以考虑求出 a→ba \to ba→b 的最短路以及 b→cb \to cb→c 的最短路然后其和的结果就是总的最短路,将小的丢到这些路径上面就好了……吗?实际上还没有,因为上述做法并没有考虑到 a→ba \to ba→b 和 b→cb \to cb→c 两条路径重合的情况,如图:此时你会发现实际上 b→tb \to tb→t 这条路径会被统计两原创 2021-08-31 21:12:18 · 104 阅读 · 0 评论 -
CF134C Swaps 题解
一道思维题。看题,发现输出 Yes 或者 No,就知道要判无解,因此首先来讨论无解的情况:如果当前总牌数 sss 为奇数,无解。这是因为交换时有两张卡牌发生了变动,为偶数,且每张牌只能交换一次,因此如果总牌数是奇数无论如何都会有一张无法交换。交换的任意时刻,自己牌数最大者大于当前可以交换的人的人数,无解。因为即使你与这些人全部交换,仍然有牌在你手上。判完无解看方案。这题其实方案是比较简单的,将每个人的信息组成 {ai,i}\{a_i,i\}{ai,i} 之后用结构体/pair放到堆里面,原创 2021-08-15 18:46:16 · 115 阅读 · 0 评论 -
CF555B Case of Fugitive 题解
一道思维题。首先我们需要转化一下题意。对于两个相邻的区间 [li,ri],[li+1,ri+1][l_i,r_i],[l_{i+1},r_{i+1}][li,ri],[li+1,ri+1],我们将这两个区间合并一下,得到能够连接这两个区间的线段长度:[li+1−ri,ri+1−li][l_{i+1}-r_i,r_{i+1}-l_i][li+1−ri,ri+1−li]。这样,问题就变成了有若干个固定位置的点,用这些点去覆盖区间的问题。将点按照其坐标进行排序,将这些区间按照左端点升序排序原创 2021-08-15 16:15:04 · 213 阅读 · 0 评论 -
CF1485D Multiples and Power Differences 题解
一道思维题。首先题目上有 1≤bi,j≤161 \leq b_{i,j} \leq 161≤bi,j≤16,而要求 bi,j∣ai,jb_{i,j} \mid a_{i,j}bi,j∣ai,j,因此我们可以求一下 [1,16][1,16][1,16] 内所有整数的 lcm\operatorname{lcm}lcm:lcm(1,2,...,16)=720720<1000000\operatorname{lcm}(1,2,...,16)=720720<1000000lcm(1,2,.原创 2021-06-24 13:13:53 · 93 阅读 · 0 评论 -
P5093 [USACO04OPEN]The Cow Lineup 题解
这道题是一道思维题。定义『段』如下:段:一个段是原序列的连续子序列,其中 [1,k][1,k][1,k] 内的所有正整数都出现过。据此,我们可以对原序列分段,分的尽量多。比如样例:1 5 3 2 5 1 3 4 4 2 5 1 2 3可以将其分成下面两段:[1 5 3 2 5 1 3 4][4 2 5 1 2 3]我们发现,每一次取每一段的最后一个数字,然后后面在加一个数字就可以构造出要求的子序列。所以,答案就是段树+1。Code:/*========= Plozia ====原创 2021-06-07 15:49:01 · 131 阅读 · 0 评论 -
P3625 [APIO2009]采油区域 题解
这道题是一道很好的二位前缀和问题。然而码量有点大。下面规定 nnn 表示行,mmm 表示列,n,mn,mn,m 同阶。即计算复杂度的时候视 O(nm)O(nm)O(nm) 为 O(n2)O(n^2)O(n2)。首先预处理 sumi,jsum_{i,j}sumi,j 表示从 (1,1)(1,1)(1,1) 到 (i,j)(i,j)(i,j) 的和,也就是二维前缀和,这里略过。考虑将一个矩阵分成 3 块无非 6 种情况,如下:上面 6 种情况又分为 2 类:第一类是前面两种全横排与全竖排。对原创 2021-05-18 14:26:21 · 171 阅读 · 1 评论 -
AT4142 [ARC098B] Xor Sum 2 题解
本题首先需要注意到几个性质:x⊕y≤x+yx \oplus y \leq x+yx⊕y≤x+y 。x⊕y=zx \oplus y = zx⊕y=z 等价于 x⊕z=yx \oplus z = yx⊕z=y 。搞清楚这两点,题目就好做了。首先,对于满足要求的连续区间 [l,r][l,r][l,r] ,如果加入数 ar+1a_{r+1}ar+1 之后不平衡了,那么我们直接弹出 ala_lal 即可,根据性质 2 以及众所周知的加减法逆运算更新即可。因此根据上述描述,可以采用 尺取法 解决本题。原创 2020-12-13 21:39:32 · 154 阅读 · 0 评论 -
P2698 [USACO12MAR]Flowerpot S 题解
本题题意简单明了。首先,题目当中 最小 二字,就是在提示我们使用二分。然后,要求最大值与最小值的差,并且区间长度固定,各位能想到什么?我想到的是使用单调队列维护。做法:首先对输入数组按照 xxx 坐标升序排序。然后二分花盆长度,跑一次单调队列即可。所以结束了?代码:#include<bits/stdc++.h>using namespace std;const int MAXN=1e5+10;int n,d;struct node{ int x,y;}a[MAX原创 2020-11-11 21:48:53 · 303 阅读 · 0 评论