并不对劲的BJOI2019】的更多相关文章

一些感想 现实并非游戏,并不支持反复刷关 猎人和防御工事一起被老山龙摧毁了: 猎人惨死雨中,结云村永无放晴之日: 猎人被狂龙病毒侵蚀,天空山上黑蚀龙泛滥. 好像这才是怪物猎人系列的真实结局呢 day 0 和吕爷立下了有关进省队的flag day 1 t1:给1个大数字串和\(m\)个小数字串,每个小串有权值,大串中有些位置的数字是确定的,有些位置是空的,需要填.定义一种填数方式生成的大串的价值为"是它的子串的小串的权值积(重复算多个)"开"是它的子串的小串的个数(重复算多个)…
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\times a_i\%\) 单位的光会穿过它,有 \(x\times b_i\%\) 的会被反射回去. 现在 \(n\) 层玻璃叠在一起,有 \(1\) 单位的光打到第 \(1\) 层玻璃上,那么有多少单位的光能穿过所有 \(n\) 层玻璃呢? 输入格式 第一行一个正整数 \(n\),表示玻璃层数.…
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的神器,试图借助神器的神秘 力量帮助她们战胜地灾军团. 在付出了惨痛的代价后,精灵们从步步凶险的远古战场取回了一件保存尚完好的神杖.但在经历过那场所有史书都视为禁忌的"诸神黄昏之战"后,神杖上镶嵌的奥术宝石 已经残缺,神力也几乎消耗殆尽.精灵高层在至高会议中决定以举国之力收集残存至今的奥术宝…
题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以不选),第$j$个物品代价为$2*v[j]+1$,收益为$i*j$. 剩下的只需要将每座城堡的所有物品放在一组然后分组背包即可. #include<set> #include<map> #include<queue> #include<stack> #inclu…
[BJOI2019]删数(线段树) 题面 洛谷 题解 按照值域我们把每个数的出现次数画成一根根的柱子,然后把柱子向左推导,\([1,n]\)中未被覆盖的区间长度就是答案. 于是问题变成了单点修改值,即修改两根柱子的长度.全体修改就可以理解为询问区间的平移. 那么只需要拿线段树维护这个东西就行了. #include<iostream> #include<cstdio> using namespace std; #define MAX 150150 #define lson (now&…
[BJOI2019]光线(递推) 题面 洛谷 题解 假装玻璃可以合并,假设前面若干玻璃的透光率是\(A\),从最底下射进去的反光率是\(B\),当前的玻璃的透光率和反光率是\(a,b\). 那么可以得到转移: \[A=A'\sum_{j=0}^\infty B'^j*b^j*a=\frac{A'a}{1-B'b}\] \[B=b+a\sum_{j=0}^\infty B'^j*b^j*a*B'=b+\frac{B'a^2}{1-B'b}\] 然后就做到线性了. #include<iostream…
[BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现用的人数一定是某个敌人的人数的二倍加一,那么决策只有\(O(s)\)个. 时间复杂度\(O(snm)\).(不满) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>…
[BJOI2019]勘破神机(斯特林数,数论) 题面 洛谷 题解 先考虑\(m=2\)的情况. 显然方案数就是\(f_i=f_{i-1}+f_{i-2}\),即斐波那契数,虽然这里求出来是斐波那契的第\(n+1\)项,但是本质上没什么区别,就默认是斐波那契数列了. 斐波那契数列的特征根是\(\alpha=\frac{1+\sqrt 5}{2},\beta=\frac{1-\sqrt 5}{2}\),然后大力设一下通项是\(f_n=A\alpha^n+B\beta^n\),可以解出\(f_n=\f…
[BJOI2019]奥术神杖(分数规划,动态规划,AC自动机) 题面 洛谷 题解 首先乘法取\(log\)变加法,开\(c\)次根变成除\(c\). 于是问题等价于最大化\(\displaystyle \frac{\sum val_i}{c}\).典型的分数规划的形式. 二分权值\(k\),每个点的点权变成\(val_i-k\),转为求最值,那么直接在\(AC\)自动机上\(dp\)就行了. 注意精度问题. #include<iostream> #include<cstdio> #…
[BJOI2019]勘破神机 推式子好题 m=2,斐波那契数列,$f_{n+1}$项 不妨$++l,++r$,直接求$f_n$ 求$\sum C(f_n,k)$,下降幂转化成阶乘幂,这样都是多项式了,方便交换求和号 最后面的斐波那契数列用通项公式求.二项式展开. 交换求和号之后,枚举i,j 最后一项是等比数列求和. %rqy m=3, n为奇数是0 n是偶数时,令n=n/2 递推公式:$g_n=4\times g_{n-1}+g_{n-2}$ 证明:枚举从后往前第一个完全分出的块,除了块长为2的…
BJOI2019 题解 在更了在更了 P5319 [BJOI2019]奥术神杖 对\(V_i\)求个\(\ln\)变成了让平均数最大,显然套分数规划,然后ac自动机上面dp #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; il ll gi(){ ll x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; c…
想要很对劲的讲解,请点击这里 题目大意 有一棵\(n\)(\(n\leq 50000\))个节点的树,有边权 求一条路径使该路径的边权平均值最接近给出的一个数\(k\) 输出边权平均值下取整的整数部分 题解 有关路径的边权平均值可以二分来做 假设已二分出边权平均值与\(k\)的差不超过\(m\),则应存在一条简单路径,路径上的\(p\)条边满足: \[-m\leq\frac{\sum_{i=1}^{p}{w_i}}{p}-k\leq m\] 两边同乘\(p\),得: \[-m*p\leq\sum…
FFT是一个很多人选择背诵全文的算法. #include<algorithm> #include<cmath> #include<complex> #include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> #include<iomanip> #include<iostream> #include<map> #…
据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 并不会讲Trie树. 1.poj1056-> 模板题. 2.bzoj1212-> 设dp[i]表示T长度为i的前缀能否被理解.这样,对于所有满足T[(x+1)...i]是一个字典中的单词的x,dp[i]|=dp[x]. 所以,就可以将所有字典中的单词倒着建一棵Trie树,计算i时将T长度为i的前缀倒着在Trie树中匹配. 最后从后往前枚举i,第一个dp[i]=1的i就是答案. #include<algorithm…
据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 先感叹一句<信息学奥赛一本通提高篇>上对kmp的解释和matrix67的博客相似度99%(还抄错了),莫非matrix67藏在编者之中? 但这不重要,因为并不对劲的人不会对kmp作出任何解释. 课后练习: 1.bzoj1355-> 可以将题目中给出的字符串看成形如这样的串: 那么,对于其中的某一位: 它到当前前缀的第二个循环节的开始组成的子串和前缀相等: 所以,对于当前位置x,fail[x]就是它到当前前缀的第二…
传送门-> 这题的正确做法是splay维护这摞书. 但是并不对劲的人选择了暴力(皮这一下很开心). #include<algorithm> #include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<iomanip> #include<iostream> #include<map> #include<qu…
传送门-> 离线操作听上去很简单,遗憾的是它强制在线. 每个时刻可以看成可持久化线段树中的一个版本,而每一个版本的线段树维护的是值某一段区间且在这个版本对应的时刻出现的数之和. 会发现同一时刻可能会有很多个数插入,这时可以对每个点记录版本,版本相同就不用更新了. 注意空间问题,并不对劲的空间让并不对劲的人调了一年. #include<algorithm> #include<cmath> #include<cstdio> #include<cstdlib>…
传送门-> 据说本题的正确读法是[shìng运数字]. 听上去本题很适合暴力,于是并不对劲的人就去写了.其实这题就是一个很普(有)通(趣)暴力+神奇的优化. 首先,会发现幸运数字很少,那么就先搜索出所有幸运数字. 找出每个幸运数字后,会发现每一个数在[a,b]出现了多少次是可以直接算出的,就是floor(b/x)-ceil(a/x)+1. 但是直接加想必是不行的,因为两个数的lcm被算重复了.这时直接容斥会不会T或者出一些奇怪的问题?当然会.所以不能直接容斥,要加些优化再容斥. 1.有些幸运数字…
传送门-> 又称普及大会. 这题没什么好说的……后缀自动机裸题……并不对劲的人太菜了,之前照着标程逐行比对才过了这道题,前几天刚刚把这题一遍写对…… 这题的输出和某两点相同后缀的长度有关,那么把串反过来就和相同前缀的长度有关.建出后缀自动机后,发现点u代表了right[u]个dis[fa[u]+1]~dis[u]相似的子串.此时如何统计答案就很显然了. 想着很简单,写着嘛…其实并不长? #include<algorithm> #include<cmath> #include&…
传送门-> 这题没什么好说的……小清新数据结构题……并不对劲的人太菜了,之前照着标程逐行比对才过了这道题,前几天刚刚把这题一遍写对…… 其实这题应该口胡很容易.操作1,2,3,4,5就是普通的splay支持的那些操作.操作6要转一个小弯,对于每个点记lmax,rmax,xmax,分别表示贴左边界的最大连续子段和(可能为空).贴右边界的最大连续子段和(可能为空).最大子段和(不能为空).现在考虑将lson[u]和rson[u]子树对应的序列的lmax,rmax,xmax经过一些神奇的操作合并,得到…
Long long ago, there was an ancient rabbit kingdom in the forest. Every rabbit in this kingdom was not cute but totally pugnacious, so the kingdom was in chaos in season and out of season.  n rabbits were numbered form 1 to n. All rabbits' weight is…
听说很对劲的太刀流不止会splay一种平衡树,并不对劲的片手流为了反驳他,并与之针锋相对,决定学学高端操作. 很对劲的太刀流-> 据说splay常数极大,但是由于只知道splay一种平衡树能对序列进行操作,或者进行分裂合并,还不能不写它. 那么常数略小的treap能否对序列操作或者分裂合并呢?想必是能的. 这就是fhq大神的可分裂与合并的treap(据说国家队人手一个自创算法?那必须的不然ctsc论文答辩怎么过). 它并没有比treap多出什么,反而省了好多事.核心操作只有split和merge…
LCT,是连猫树(link-cat-tree)的缩写.它是树链剖分和splay的结合版本. 由于有很多关于LCT的文章以及这并不是对劲的文章,并不对劲的人并不打算讲得太详细. 推荐:详细的LCT-> 想必大家都知道splay+树剖=LCT splay虽然常数较大,但是它好写好调(大部分操作都可以把左右边界转上去然后直接操作),而且还能维护序列. 树剖是将一棵树切分成很多条链,再将它们首尾相接拼成一个序列.可以用线段树来维护序列,进行区间操作,不过并不能插入和删除. 那么用splay来维护区间是不…
为了反驳很对劲的太刀流,并不对劲的片手流决定与之针锋相对. 很对劲的太刀流-> 2638: 黑白染色 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 177  Solved: 87[Submit][Status][Discuss] Description 你有一个n*m的矩形,一开始所有格子都是白色,然后给出一个目标状态的矩形,有的地方是白色,有的地方是黑色,你每次可以选择一个连通块(四连通块,且不要求颜色一样)进行染色操作(染成白色或者黑色).问…
为了反驳隔壁很对劲的太刀流,并不对劲的片手流决定与之针锋相对,先一步发表cdq分治解三维偏序. 很对劲的太刀流在这里->  参照一.二维偏序的方法,会发现一位偏序就是直接排序,可以看成通过排序使第一维无效.二维偏序是排序+树状数组,就是先通过排序消除了第一维的影响,再通过树状数组进行统计.那么以此类推,三位偏序应该就是树套树状数组…啊不对,是先通过排序消除第一维的影响,再通过[某种方法]消除第二维的影响,再用树状数组统计. 传说中的[某种方法]就是cdq分治,它是一种通过计算前一半对后一半的影响…
有些时候,后缀自动机并不能解决某些问题,或者解决很麻烦.这时就有各种神奇的字符串算法了. manacher算法用来O(|S|)地求出字符串S的最长的回文子串的长度.这是怎么做到的呢? 并不对劲的暴力选手在刚见到求字符串S的最长的回文串的长度这个问题时,第一反应就是枚举每一个位置为回文串的对称轴,再暴力地判断.由于回文串的对称轴可能在缝隙处,对于奇偶还要特判.这时最好每隔一个字符插入一个奇怪的字符.对暴力做一些优化,就是用二分+哈希来判断.不过这也只能o(|S| log2|S|)地做出来.能不能利…
听上去像是破坏植物的暴力行为(并不). 可以快速查询某个字符串在某个字符串集中出现了几次,而且听上去比字符串哈希靠谱. 把整个字符串集建成树,边权是字符,对于字符串结尾的节点进行特殊标记. 这样一方面合并了前缀,节省空间:另一方面查询很方便,直接按边走就行. #include<iostream> #include<iomanip> #include<cstdio> #include<cstring> #include<cstdlib> #incl…
这像是能解决所有问题的样子(并不).AC自动机之所以叫AC自动机是因为它能解决所有AC自动机的题. 其实只能解决的是很多模式串匹配一个母串的问题. 把kmp中的next数组得到下一次跳转的位置看成特殊的边,把字符串看成链,就会得到一个特殊的图. 一个点u的next连向点v对应的字符串是u最长的后缀,把这个图套用到很多个模式串组成的trie上. 对于点u能走到的节点ch[u][i],相当于在u对应的字符串后补了一个字符i.那么点u的next连向的点v对应的字符串后面再补一个字符i就是点ch[u][…
splay和不加任何旋转一定会被卡的二叉搜索树的唯一区别就是每次操作把当前节点旋转到根. 旋转有各种zig.zag的组合方式,感觉很麻烦,并不对劲的人并不想讲. 其实可以找出一些共性将它们合并.设ls(a)=[点a是其父亲的左儿子],son[a][0]=a的左儿子,son[a][1]=a的右儿子,fa[a]=a的父亲.会发现单旋u时,有变动的点只有son[u][ls(u)^1],u,fa[u],fa[fa[u]].再仔细想想,儿子有变动的有fa[fa[u]](son[fa[fa[u]]][ls(…
题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现floyd每次相当于加入了一个点(注意,这里的“一次”也是O(点数^3)的,但是在这一次floyd的过程中不会更新结果.)也就是说,第一次floyd求出来了两点之间只走一条边的最短路,第二次求出来了两点之间只走两条边的最短路……,第n次求出来了只走n条边的最短路.这时候就会发现,n遍不在过程中更新答案的floy…