「SCOI2016」背单词 解题报告】的更多相关文章

「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的后缀是bc和c 否则 如果它的后缀(指在n个单词中的)在1~x-1全部出现了,代价为x-最后一个后缀的位置y 如果没有全部出现,代价n^2 看我气的连latex都懒得用了 然后你发现按后缀建字典树就可以了 然后你发现直接按子树大小贪心就可以了 但是我一开始偷懒就直接在trie上贪心走子树,这样是不行…
题目链接 loj#2012. 「SCOI2016」背单词 题解 题面描述有点不清楚. 考虑贪心 type1的花费一定不会是优的,不考虑, 所以先把后缀填进去,对于反串建trie树, 先填父亲再填儿子,这样每个单词的后缀填完了才会被填. 不是单词结束点的点是没用的,去掉 根据直觉,填单词和dfs序有关,所以应该先填Size小的 根据贪心,先填Size小的儿子.因为将Size小的先填可以减少后面儿子的代价 而先填大的会增加代价. 代码 #include<queue> #include<cst…
#2012. 「SCOI2016」背单词 思路: Orz: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #define maxm 510005 ],tot=,len,head[maxm],E[maxm],V[maxm],cnt=; int val[maxm],cnt2,size[maxm],sta[maxm],top; long long ans,sum; char line[maxm]; inli…
「SCOI2016」背单词 Lweb 面对如山的英语单词,陷入了深深的沉思,「我怎么样才能快点学完,然后去玩三国杀呢?」.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,然后凤老师告诉 Lweb ,我知道你要学习的单词总共有 $ n $ 个,现在我们从上往下完成计划表,对于一个序号为 $ x $ 的单词(序号 $ 1 \ldots x-1 $ 都已经被填入): 1. 如果存在一个单词是它的后缀,并且当前没有被填入表内,那他需要吃 $ n \times n $ 颗泡椒才能…
题解 我们发现第一种操作肯定不可取,每个节点里它最近的点是它最长出现过的后缀,发现这就是AC自动机的fail节点,根据fail的关系这会是一棵树,而一个单词的前一个序号最大的后缀必定是它的父亲 然后我们考虑怎么获得最小值,x是肯定要加上的,我们让每次减掉的y最小 一个错误的想法:按照儿子个数分类,建一个set,每次拿儿子最小的= = emmm这个,如果你有一条10^3的链和1个点5个儿子比较一下,会发现这是错的 我们不拿这个点会造成多少贡献来看,我们初始设置每个点要减去的值都是0,我们挑选了一个…
-- #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> using namespace std; typedef pair<int,int> par; typedef long long ll; int s[510005][26], n, len, cnt, idx[510005], hea[5…
「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就是每个值是否可以被表示,而这个问题有点像问你一个单点的是否可以被表示,这是它的特殊性. 我们把这个整数集排序后,假设当前表示的区间是\([1,x]\),这时候在线加入\(a\) 如果\(a\le x\),显然值域变成\([1,x+a]\),否则答案假设\(x+1\) 考虑如何优化这个过程,我们可不可…
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操作2的合法性,我们不妨先不计合法性把所有点加到树中 显然每个点要连到在这个点之前的离这个点时间上最近那个1操作的点上 然后可以发现移动时1操作相当于很多个点换根 我们可以对每个1操作建一个虚点,然后就可以很方便换根了 那么如何保证查询操作呢? 可以把每个1操作的虚点大小设成0(代表它父亲边的直接长度…
「NOI2015」寿司晚宴 这个题思路其实挺自然的,但是我太傻了...最开始想着钦定一些,结果发现假了.. 首先一个比较套路的事情是状压前8个质数,后面的只会在一个数出现一次的再想办法就好. 然后发现有个重要的事情是后面每个质因子\(x\)做统计的时候都是独立的,那么单独做就好了 显然要压两个人的前面质因子集合\(f_{i,j}\)代表两个人分别是\(i,j\)集合的答案,然后一块一块的加后面的质因子就好 加每一块时,我们显然需要处理谁选择了这一块或者都没选,再搞个\(dp_{0/1,i,j}\…
「SCOI2015」国旗计划 蛮有趣的一个题 注意到区间互不交错,那么如果我们已经钦定了一个区间,它选择的下一个区间是唯一的,就是和它有交且右端点在最右边的,这个可以单调队列预处理一下 然后往后面跳拿倍增优化一下 Code: #include <cstdio> #include <cctype> #include <algorithm> #define int unsigned int const int N=4e5+10; template <class T&g…