【LOJ】#2720. 「NOI2018」你的名字】的更多相关文章

题目:https://loj.ac/problem/2720 自己总是分不清 “SAM上一个点的 len[ ] ” 和 “一个串的前缀在 SAM 上匹配的 len ”. 于是原本想的 68 分做法是,求出 T 的本质不同子串个数,减去 T 在 S 的 SAM 上走的 fail 树的链并权值.SAM 上一个点的权值就是它代表的子串个数(len[ cr ] - len[ fa ]). 其实不行.因为 T 走到 S 的 SAM 的某个点,不是能匹配该点代表的所有子串,而是只作为 T 的一个前缀匹配了一…
链接大合集: loj uoj luogu bzoj 单纯地纪念一下写的第一份5K代码.../躺尸 因为ZJOI都不会所以只好写NOI的题了... 总之字符串题肯定一上来就拼个大字符串跑后缀数组啦! (为了便于说明,放一下样例的sa) #sbape#sgepe #sgepe #smape#sbape#sgepe amgepe#smape#sbape#sgepe ape#sbape#sgepe ape#sgepe bamgepe#smape#sbape#sgepe bape#sgepe cbamge…
题解 把S串建一个后缀自动机 用一个可持久化权值线段树维护每个节点的right集合是哪些节点 求本质不同的子串我们就是要求T串中以每个点为结束点的串有多少在\(S[l..r]\)中出现过 首先我们需要对于T串每个点本身和自己的匹配长度,可以建一个后缀自动机来完成 然后把T串放在S串上跑匹配,匹配到下一个点x时,匹配的长度是len,如果x所在的right集合在\([l + len - 1,r]\)中没有,那么就不合法,把长度减少,如果长度减少到和父亲节点的长度一样,则需要把当前节点跳到父亲节点上…
题面: https://loj.ac/problem/2720 考虑枚举T串的每个后缀i,我们要做两件事. 一.统计有多少子串[i,j]在S中要求位置出现. 二.去重. 第二步好做,相当于在后缀数组上找到后继,假设后继的height为p. 那对于i这个后缀,只计算i+p后面的即可. 一的话每次找到最远的能匹配的一个位置,可以发现枚举每个后缀时右端点单调,双指针扫一下. 剩下的就是快速的判定一个子串是否合法. 考虑在后缀数组上左右二分到一个区间满足所有后缀和i的lcp都大于等于len(len=j-…
「NOI2018」你的名字 题目描述 小A 被选为了\(ION2018\) 的出题人,他精心准备了一道质量十分高的题目,且已经 把除了题目命名以外的工作都做好了. 由于\(ION\) 已经举办了很多届,所以在题目命名上也是有规定的,\(ION\) 命题手册规 定:每年由命题委员会规定一个小写字母字符串,我们称之为那一年的命名串,要求每道题的名字必须是那一年的命名串的一个非空连续子串,且不能和前一年的任何一道题目的名字相同. 由于一些特殊的原因,小A 不知道\(ION2017\) 每道题的名字,但…
题意 LOJ #2721. 「NOI2018」屠龙勇士 题解 首先假设每条龙都可以打死,每次拿到的剑攻击力为 \(ATK\) . 这个需要支持每次插入一个数,查找比一个 \(\le\) 数最大的数(或者找到 \(>\) 一个数的最小数),删除一个数. 这个东西显然是可以用 std :: multiset<long long> 来处理的(手写权值线段树或者平衡树也行). 对于每一条龙我们只能刚好一次秒杀,并且要恰好算血量最后为 \(0\)(一波带走). 然后就转化成求很多个方程: \[ \…
题目链接 loj#2718. 「NOI2018」归程 题解 按照高度做克鲁斯卡尔重构树 那么对于询问倍增找到当前点能到达的高度最小可行点,该点的子树就是能到达的联通快,维护子树中到1节点的最短距离 spfa她死了...同步赛没写的说... 似乎前两题比去年简单些....连蒟蒻我都可做前两题的说 代码 #include<queue> #include<cstdio> #include<cstring> #include<algorithm> inline in…
题目链接 loj#2721. 「NOI2018」屠龙勇士 题解 首先可以列出线性方程组 方程组转化为在模p意义下的同余方程 因为不保证pp 互素,考虑扩展中国剩余定理合并 方程组是带系数的,我们要做的是在%p意义下把系数除过去,(系数为atk[i]) (atk[i],p[i]) 不等于1时无逆元,此时仍可能有解 很显然无解的情况就是 瞎jb猜的,无解的话就是%p[i]意义下atk[i] != 0 ,a[i] = 0 考虑原方程式ai = atk{i] * x + p[i] * y 方程两边同除g…
Loj #2719. 「NOI2018」冒泡排序 题目描述 最近,小 S 对冒泡排序产生了浓厚的兴趣.为了问题简单,小 S 只研究对 *\(1\) 到 \(n\) 的排列*的冒泡排序. 下面是对冒泡排序的算法描述. 输入:一个长度为 n 的排列 p[1...n] 输出:p 排序后的结果. for i = 1 to n do ​ for j = 1 to n - 1 do ​ if(p[j] > p[j + 1]) ​ 交换 p[j] 与 p[j + 1] 的值 冒泡排序的交换次数被定义为交换过程…
题目传送门 传送门 题目大意 (相信大家都知道) 显然要考虑一个排列$p$合法的充要条件. 考虑这样一个构造$p$的过程.设排列$p^{-1}_{i}$满足$p_{p^{-1}_i} = i$. 初始令$q = (1, 2, \cdots, n)$. 依次考虑$i = 1, 2, \cdots, n$. 设$x = p_i$,如果$q^{-1}_x > i$,那么交换$q_x, q_{x - 1}$. 上述算法每次交换的时候会使逆序对增加1. 考虑给出的下界,假设交换的是$i$和$i + 1$.…
把 $Noi2018$ day1t1 想出来还是挺开心的,虽然是一道水题~ 预处理出来 1 号点到其它点的最短路,然后预处理边权从大到小排序后加入前 $i$ 个边的并查集. 这个并查集用可持久化线段树维护可持久化数组来完成. 每次询问时在边集上二分一下,找到对应的并查集,然后找到祖先并输出极小值即可. #include <bits/stdc++.h> #define N 400005 #define ll long long #define setIO(s) freopen(s".i…
题目:https://loj.ac/problem/2721 1.注意别一输入 p[ i ] 就 a[ i ] %= p[ i ] ,因为在 multiset 里找的时候还需要真实值. 2.注意用 multiset .并且,因为要 upper_bound( a[ i ] ) ,而 a[ i ] 是一个 long long 类型的,所以即使 multiset 里装的都是 int 类型的,也得开成 long long 的 multiset . 3.注意除了同余的限制,还有一个是 \( x*c_i >…
题目:https://loj.ac/problem/2719 首先要发现合法的充要条件是 | LDS | <=2 ! 因为有没用的步数,说明一个元素先往左移.又往右移(不会先往右移再往左移,因为一旦往右移,说明它是前缀最大值,并且一直是),就说明它前面有一个比它大的.后面有一个比它小的,即有长度至少为 3 的 LDS . 考虑 DP ,已填了前 i 个位置.注意到已经填过的最大的数最容易产生 LDS ,所以令 dp[ i ][ j ] 表示填了前 i 个位置.已填的最大数是 j 的方案数. 考虑…
题意 给你一个长为 \(n\) 的排列 \(p\) ,问你有多少个等长的排列满足 字典序比 \(p\) 大 : 它进行冒泡排序所需要交换的次数可以取到下界,也就是令第 \(i\) 个数为 \(a_i\) ,下界为 \(\displaystyle \sum_{i=1}^{n} |i - a_i|\) . 题解 一道特别好的题,理解后做完是真的舒畅- 参考了 liuzhangfeiabc 大佬的博客 . 首先我们观察一下最后的序列有什么性质: 考试 打表 观察的:对于每个数来说,它后面所有小于它的数…
题意 给你一个无向图,其中每条边有两个值 \(l, a\) 代表一条边的长度和海拔. 其中有 \(q\) 次询问(强制在线),每次询问给你两个参数 \(v, p\) ,表示在 \(v\) 出发,能开车经过海拔 \(> p\) 的边,其中 \(\le p\) 的边只能步行,步行后不能继续开车了. 询问它到 \(1\) 号点最少要步行多远. 多组数据.\(n \le 200000~~ m,q \le 400000\) . 题解 一个直观的想法,对于每次询问,我们保留 \(>p\) 的边,然后求出联…
[题解] 本题有多种做法,例如可持久化并查集.kruskal重构树等. kruskal重构树的做法是这样的:先把边按照海拔h从大到小的顺序排序,然后跑kruskal建立海拔的最大生成树,顺便建kruskal重构树. 这样建出来的重构树是一个小根堆,也就是说,如果某个节点没有被淹,它的子树内的点都不会被淹,它们可以互相开车到达. 我们建重构树的时候维护每个节点的子树内的点到1号点的最小距离mn,mn先用dijkstra处理好. #include<cstdio> #include<cstri…
「NOI2018」屠龙勇士 题目描述 小\(D\)最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号\(1-n\)顺序杀掉\(n\) 条巨龙,每条巨龙拥有一个初始的生命 值ai .同时每条巨龙拥有恢复能力,当其使用恢复能力时,它的生命值就会每 次增加 \(p_i\) ,直至生命值非负.只有在攻击结束后且当生命值恰好为 \(0\) 时它才会 死去. 游戏开始时玩家拥有\(m\)把攻击力已知的剑,每次面对巨龙时,玩家只能选择一 把剑,当杀死巨龙后这把剑就会消失,但作为奖励,玩家会获得…
「NOI2018」归程 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 >\(1\) 个节点. \(m\) 条边的无向连通图(节点的编号从 \(1\) 至 \(n\) ).我们依次用 \(l, a\) 描述一 条边的长度.海拔. 作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不 可避免 的.由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边.我们用水>位线来描述降雨的程度,它的意义是:所有海拔不超过水位线的边…
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决定!SHOI 概率充电器,您生 活不可或缺的必需品!能充上电吗?现在就试试看吧!」 SHOI 概率充电器由 \(n-1\) 条导线连通了 \(n\) 个充电元件.进行充电时,每条导线是否可以导电以 概率决定,每一个充电元件自身是否直接进行充电也由概率决定.随后电能可以从直接充电的元件经…
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \sum_{i=0}^{T-1} [(i\in A\pmod P)\land(i\in B\pmod Q)] \] 换言之,就是问有多少个小于 \(T\) 的非负整数 \(x\) 满足:\(x\) 除以 \(P\) 的余数属于 \(A\) 且 \(x\) 除以 \(Q\) 的余数属于 \(B\). 输…
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\times a_i\%\) 单位的光会穿过它,有 \(x\times b_i\%\) 的会被反射回去. 现在 \(n\) 层玻璃叠在一起,有 \(1\) 单位的光打到第 \(1\) 层玻璃上,那么有多少单位的光能穿过所有 \(n\) 层玻璃呢? 输入格式 第一行一个正整数 \(n\),表示玻璃层数.…
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的神器,试图借助神器的神秘 力量帮助她们战胜地灾军团. 在付出了惨痛的代价后,精灵们从步步凶险的远古战场取回了一件保存尚完好的神杖.但在经历过那场所有史书都视为禁忌的"诸神黄昏之战"后,神杖上镶嵌的奥术宝石 已经残缺,神力也几乎消耗殆尽.精灵高层在至高会议中决定以举国之力收集残存至今的奥术宝…
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一直随机游走,直到点集 \(S\) 中所有点都至少经过一次的话,期望游走几步. 特别地,点 \(x\)(即起点)视为一开始就被经过了一次. 答案对 $998244353 $ 取模. 输入格式 第一行三个正整数 \(n,Q,x\). 接下来 \(…
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k\).第一次修改之前及每次修改之后,都要求你找到一个同样长度为 \(n\) 的单调不降序列 \(B_1, \ldots , B_n\),使得 \(\sum_{i=1}^n (A_i −B_i)^2\) 最小,并输出该最小值.需要注意的是每次操作的影响都是独立的,也即每次操作只会对当前询问造成影响.为…
Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开始凸多边形中有 \(n\) 条线段,即多边形的 \(n\) 条边.这里我们用一个有序数对 \((a, b)\)(其中 \(a < b\))来表示一条端点分别为顶点 \(a, b\) 的线段. 在游戏开始之前,小 W 会进行一些操作.每次操作时,他会选中多边形的两个互异顶点,给它们之间连一条线段,并且…
Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 \(x\) 欧拉或者 \(x\) 木大表示有 \(x\) 个欧拉或者木大. 为了简化内容我们现在用字母表示喊出的话. 我们用数字和字母来表示一个串,例如:2 a 3 b 表示的串就是 aabbb. 一开始漫画中什么话都没有,接下来你需要依次实现 \(n\) 个操作,总共只有 \(2\) 种操作:…
Loj 3058. 「HNOI2019」白兔之舞 题目描述 有一张顶点数为 \((L+1)\times n\) 的有向图.这张图的每个顶点由一个二元组 \((u,v)\) 表示 \((0\le u\le L,1\le v\le n)\).这张图不是简单图,对于任意两个顶点 \((u_1,v_1),(u_2,v_2)\),如果 \(u_1<u_2\),则从 \((u_1,v_1)\) 到 \((u_2,v_2)\) 一共有 \(w(v_1,v_2)\) 条不同的边,如果 \(u_1\ge u_2\…
Loj #3057. 「HNOI2019」校园旅行 某学校的每个建筑都有一个独特的编号.一天你在校园里无聊,决定在校园内随意地漫步. 你已经在校园里呆过一段时间,对校园内每个建筑的编号非常熟悉,于是你情不自禁的把周围每个建筑的编号都记了下来--但其实你没有真的记下来,而是把每个建筑的编号除以 \(2\) 取余数得到 \(0\) 或 \(1\),作为该建筑的标记,多个建筑物的标记连在一起形成一个 \(01\) 串. 你对这个串很感兴趣,尤其是对于这个串是回文串的情况,于是你决定研究这个问题. 学校…
题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的路径,另一条是 \(lca\) 到 \(y\) 的路径.(对于 \(x, y\) 是 \(lca\) 的情况需要特殊考虑一下就行了) 这个求 \(lca\) 的过程用倍增实现就行了. 假设令到达时间为 \(at\) . 不难发现,在树上向上的路径满足 \(dep_u + at_u=d_1\) (深度…
loj#2483. 「CEOI2017」Building Bridges 链接 https://loj.ac/problem/2483 思路 \[f[i]=f[j]+(h[i]-h[j])^2+(sum[i-1]-sum[j])\] \[f[i]=f[j]+h[i]^2+h[j]^2-2*h[i]*h[j]+sum[i-1]-sum[j]\] \[sum[j]-f[j]-h[j]^2=(-2*h[j])*h[i]+sum[i-1]+h[i]^2-f[i]\] \[f[j]+h[j]^2-sum[…