
优化暴力
xyc1719
努力会说谎,但努力不会是白费
展开
-
国庆七连测(二) 模模塔
(这是什么破标题)【一句话题意】给定两个数组ai和bi,求数组ci。变换规律为ci=Σj=1i⌊ab⌋bi mod j c_{i}=\Sigma^i_{j=1} \lfloor \frac{a}{b}\rfloor b_{i \,mod\,j}ci=Σj=1i⌊ba⌋bimodjn<=100,000所以ci是12345678...原创 2018-10-02 17:06:39 · 218 阅读 · 0 评论 -
序列 sequence.cpp
【一句话题意】有一个序列,定义f(x)为x在十进制下的位数,特别地,求对于序列Σ1≤i&lt;j≤nf(ai+aj)\Sigma_{1≤i&lt;j≤n}f(a_i+a_j)Σ1≤i<j≤nf(ai+aj)【分析】先将序列从小到大排序。枚举i点,再二分i点左边最小的使aia_iai进位的点。时间复杂度O(nlog2n)O(nlog_2n)O(nlog2n)【c...原创 2018-11-01 16:59:58 · 348 阅读 · 0 评论 -
正方形 square.cpp
【一句话题意】有t个询问,求Πi=1nΠj=1ni∗jgcd(i,j)2\Pi^n_{i=1}\Pi^n_{j=1}\frac{i*j}{gcd(i,j)^2}Πi=1nΠj=1ngcd(i,j)2i∗jt<=1e6,n<=1e7 时限比1s长一点。【分析】原题不如概括后简洁和清晰,但概括和抽象也是图论和数论所要强调的能力。这次考试犯了数论题的大忌:死盯着题目想结论,而不是...原创 2018-11-01 18:36:32 · 321 阅读 · 0 评论 -
windy数 数位DP
【一句话题意】定义相邻两个数位之差都大于2的数为windy,问[a,b]中windy数有多少。a,b&lt;=2e9【分析】鉴于a,b的值并不是太大(int都存的下),所以就产生了玄学打表的方法,按每1e6个数打一次表记录到x为止有一个windy数。边界部分就直接暴力枚举2e6个数。不服不行啊当然数位dp可以比它复杂度上更优,也跟更能处理复杂的情况。定义f[i,j]表示i位数,最高位为j的方...原创 2018-11-01 21:11:46 · 311 阅读 · 0 评论 -
排名【二分答案】【数据结构+模拟】
【一句话题意】给定n个人的初始位置,再给出每个人的速度,问在无限长的跑道上前m次“追赶事件”(一个人超过另一个人)n,m<=1e5【分析】这道题二分答案乱搞,先二分时间,再归并排序求逆序对,然后有个不强和另一个超强的剪枝。(弱)如果二分出的mid,求得的逆序对个数等于m,则跳出循环。(强)如果逆序对个数已经大于m了,则结束归并排序。std是说,用链表模拟(或者说维护?)相对位置,再用优...原创 2018-11-06 16:03:48 · 179 阅读 · 0 评论 -
决赛 【数据结构】【排序】【贪心】
【一句话题意】题目大意:有 题目大意:有 N类询问 区间 [l[i],r[i]]各 s[i] 个。有 M类可用区间 [l[i],r[i]]各t[i] 个,现在要对每个询问区间配对上一个包含它的可用区间。n,m<=4e5【分析】先按左端点排序n+m个区间(当节点数相同时可用区间在前),如果是可用区间相当于在ri点添加了ti个点。如果是询问区间,则贪心删去在ri点及其右边的si个后继,如果不...原创 2018-11-06 16:19:21 · 142 阅读 · 0 评论 -
量子二叉堆 动态规划+乱搞求逆元
【一句话题意】最后希望你给出n个互不相同的数能构成多少个不同的大小为n的二叉堆(大根堆或小根堆都算二叉堆,不同定义为至少有一个位置上数不同)。n&lt;=5e6【分析】对于二叉堆,顶端最小(或最大)是确定的,剩余元素的分配其实是随意的。将剩余的元素随意分配到左右两棵子树,离散化之后就变成了之前的一个已求得的子问题。可以得到一个(伪)状态转移方程f[x]=f[x左子树节点数]∗f[x右子树节点...原创 2018-11-04 14:30:54 · 202 阅读 · 0 评论 -
作画鬼才
【题意】给出一幅原图,接下来有k幅图,每一幅都是在原图上选取一个矩形将他们改为同一个颜色,问以那幅画为标准的差异值最小【分析】大致思路是“在一个二维平面有大量修改,求修改后的统计结果“。既然有大量修改,又可以离线回答统计结果,何不用差分呢(抱歉,这里是二维的)。差分表示到(i,j)颜色为k的修改有几个,nm跑一遍就可得到(i,j)有几个点修改为颜色k,加上原图中未被修改的部分就是(i,j)颜色为...原创 2018-11-04 16:06:41 · 195 阅读 · 0 评论 -
键盘 keyboard.cpp
【一句话题意】有多种操作1、删除一个字符,代价为12、加入一个字符,代价为13、复制字符串为原来的k倍,代价为2+2*k3、删除所有字符,代价为3现在有初始长度为x,求到长度n最小代价。【分析】题目稍作简化,请无视。显然删除所有字符只有在所有操作之前(反证法即可)。稍作思考即可发现,dp值的大小,存在极强的后效性。所以,改成最短路求dist[x],spfa玄学复杂度再加常数优化...原创 2018-11-07 13:43:26 · 402 阅读 · 0 评论 -
序列 sequence.cpp【搜索】【剪枝】
【一句话题意】给定一个1~n 的排列x,每次你可以将x1~xi 翻转。你需要求出将序列变为升序的最小操作次数。有多组数据。n<=25【分析】为什么我会,看到题会一头雾水?这就对了,因为这是一道搜索题。在baidu上浏览各个大佬的题解,核心都是估价函数+迭代加深。迭代加深可以理解,基于估价函数,我们可知从当前状态到目标状态(有序)的最少翻转次数。显然如果当前翻转次数+估价值大于迭代限制...原创 2018-11-07 16:25:36 · 313 阅读 · 0 评论 -
有趣的游戏
【简要题面】有四组数字a,b,c,da,b,c,da,b,c,d。a,b,ca,b,ca,b,c的个数小于1000,d的个数小于1e5。对于每个d求是否存在ai+bi+ci=da_i+b_i+c_i=dai+bi+ci=d(ai、bi、cia_i、b_i、c_iai、bi、ci均为a、b、ca、b、ca、b、c数组中的一个数)。【分析】由于a、b、ca、b、ca、b、c中数字的大小...原创 2019-02-15 13:53:50 · 319 阅读 · 0 评论 -
弹药分配
【简要题意】原先有一个序列各有一定的值。有5e4个操作,分两种:1.在选取一个区间【a,b】,并给出一个值k,区间上如果编号i 满足(i- a) % k = 0 就加上c。(k<=10)2.询问序列中某个数的当前值。【分析】对于k较小,且序列长度<=5e4的情况,我们可以分模数和余数建K2个树状数组。询问时将这些修改相加。【code】#include<cstdio&g...原创 2019-02-17 13:39:03 · 264 阅读 · 0 评论 -
调换纸牌
【简要题意】将n个纸牌移动到任意位置后可以形成升序的序列。求最小的n。Len<=5e5。【分析】求最长不降子序列(LIS)。用f[i]记目前为止,长度为i的序列最小为多少再用二分查找。总复杂度为Θ(nlog2n)\Theta(nlog_2n)Θ(nlog2n)【code】#include<cstdio>#include<cstring>#include&...原创 2019-02-18 13:40:50 · 198 阅读 · 0 评论 -
区间最小
【简要题意】给一个长度为n序列,对每个位置i问[max(1,i-m),i]中最小的值。n<=1e6,m<=1e6。【分析】一道单调队列模板题。当然鉴于n没有非常大,所以也可以用st表水过。【code】#include<cstdio>#include<cstring>#include<iostream>#include<algorit...原创 2019-02-18 13:57:46 · 355 阅读 · 0 评论 -
卡内存
【简要题意】给一个长度为n序列。进行m次如下操作:1.add x k:给a[x]加上k。2.ask x y:查询区间[x,y]内所有数的和。3.goto t:回到第t次操作之后的状态。n,m<=1e5。特别注意:空间限制为8MB【分析】由于题目背景中出现了可持久化线段树,又有回退到历史版本的操作,所以很多人试图如题目所说的那样卡可持久化的内存。事实证明是卡不过的。这里有一种神奇...原创 2019-02-24 14:55:42 · 10519 阅读 · 0 评论 -
【算法进阶】 CIty Games
【题面】有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。这片土地被分成N∗MN*MN∗M个格子,每个格子里写着’R’或者’F’,R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda。现在freda要在这里卖萌。。。它要找一块矩形土地,要求这片土地都标着’F’并且面积最大。但是rainbow和freda...原创 2019-04-03 22:03:27 · 234 阅读 · 0 评论 -
beautiful.cpp
【一句话题意】给一个长度为n的序列,第i个数的优美值为包含i且i为中位数的序列的最大长度。有Q个询问,每次询问l到r的区间中的最大优美值。n<=2e3,Q<=1e5【分析】先预处理出序列中每个数的优美值,然后构建ST表解决RMQ问题。预处理与之间的一道标记差值的题目有几分神似,都是用空间换时间。【code】#include<queue>#include<c...原创 2018-10-27 16:50:06 · 153 阅读 · 0 评论 -
树上摩托 sherco.cpp
【一句话题意】给定一棵树,问剪成几棵节点数相同的子树的方案数。节点数n<=1e6【分析】易证当每棵子树的节点数相同时,划分方案是唯一的。问题在于确定点数并进行判定。本来是一道愉悦身心的好题,结果n是1e6。考场上是先根号n筛n的因数,再用dfs判定,结果。。。顺利超时。然后,正解是把dfs转化为O(n)的线性扫描,原因是常数小。。。。。再次投诉出题人,竟然卡dfs。【code】#i...原创 2018-10-27 16:39:27 · 243 阅读 · 0 评论 -
国庆七连测(四)
题目比较简单,没有什么好讲的。放一下题目。SP16244 KUSAC - KusacSP16409 LOPOV - LopovSP16180 RATAR - Ratar代码:Kusac#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usin...原创 2018-10-04 16:52:45 · 217 阅读 · 0 评论 -
国庆七天测(五)祭司
【题意】给定n个数的取值范围,把他们分为a,b两组。找到一种恰当的分组使得,两个集合的差值的绝对值的最大值最小。n,li,ri&amp;lt;=200【分析】首先一个显而易见的规律是,差值最大值一定是一个集合最大值减去另一个集合的最小值。这样我们可以在确定集合时O(1)出解。然后二进制枚举加玄学猴子排序就可以ac了,然而并不是正解。考虑一种dp,定义f[i][j]为A集合中下界为i上界为j能否达到。设...原创 2018-10-05 15:33:52 · 147 阅读 · 0 评论 -
国庆七连测(五)(AK.cpp)
什么破标题【一句话题意】 给定一个长度为n的序列。有m个询问,每次询问[l,r]的序列和,并将区间内所有数平方。【分析】通过打表发现当一个数平方几十次之后他就会陷入一个平方不变的循环。我们可以暴力修改每个数,并用线段树(树状数组或者分块)维护区间和,用并查集优化修改时的扫描次数。(这是第几次用并查集合并区间了,管他呢)。Code:#include&amp;amp;amp;lt;cstdio&amp;amp;amp;gt;#includ...原创 2018-10-05 15:44:00 · 144 阅读 · 0 评论 -
国庆七连测(六) 战斗
【简化题意】一条长度为n的序列中选取k个数,并选取其中一个数作为基准数。其他k-1个数减去基准数后的平方和等于代价。求最小代价是多少。n&lt;=1e5输入时的序列不严格单调递增。【分析】首先我们改变一下思路,每次选取一个基准数,然后选择剩下的k-1个数。显然的这k-1个数一定是连续的,且分布在基准数的左右两边。并且随着基准数的位置右移单调递增。利用two-pointer的思想我们用O(...原创 2018-10-06 16:06:09 · 144 阅读 · 0 评论 -
国庆七连测(六)计数
给出一个数n,根据该数建图,从每个点到该点的倍数(包括自己和0)连一条单向边 然后给出三个数,q1,q2,q3,求出 1.从1到q1所有长度为2的点 2.从1到0中长度小于q2的路径个数 3.从1到0中长度小于q3且不经过重复点的路径个数 4.3中所有路径上的编号和的和 这道题看上去是道数论题,实际上是dp题对于第一问,我们可以发现,从1可以到任何数,而到q1的只能是q1的因数,...原创 2018-10-06 16:11:28 · 137 阅读 · 0 评论 -
Pair.cpp
【一句话题意】给出一个n*m的图,其中数字相同的如果没有阻碍就可以连接消除,求出最大连接数和最大连接情况下的最小连接距离【分析】这道题是一道奇怪的暴力题,需要用正确率换时间或者加上特判,然后随机数随便搞搞就行了【code】#include<bits/stdc++.h>#pragma GCC optimize(2)#define R(i,s,t) for(int i=s;i&l...原创 2018-10-28 15:19:37 · 190 阅读 · 0 评论 -
A decorative fence 计数
【一句话题意】给n块长度为1~n的木板,组成一个长度为n的序列,满足相邻的木板都比自己长或短。方案按字典序排列。有多组询问,问当有ai块木板时,第bi号方案是什么。ai<=20,bi<=263【分析】类似于倍增dp的“拼凑”思想和手推康托展开时的方式,我们可以用“试填”的方式来确定第bi号方案中各个木板的长度。比如从小到大枚举,如果当第一块木板长为h时,N-1块木板的构成的方案数T...原创 2018-10-28 18:49:33 · 228 阅读 · 0 评论 -
poj3208 启示录 数位dp
【一句话题意】定义十进制下有3个连续的6的数为魔鬼数。有T个询问,求第k小的魔鬼数。T<=1000,k<=5e7【分析】由于K有5e7那么大,哪怕线性dp,常数稍大就会有TLE的风险。如果内存小于128MB又会有MLE的问题显然,预处理出第k大的魔鬼数是不可靠的。由于T较小,我们转而考虑能否像计数dp一样将先大致预处理出辅助数组,再进行“拼凑”。回答是可行的。但dp数组的定义是与...原创 2018-10-28 20:17:08 · 819 阅读 · 0 评论 -
Copier
【题意】有n台机器,给出每台机器的复印时间ti,有m个订单,每个订单大小用ai表示。规定复印机必须从小到大开启,必须有复印件才能进行复印,开始时只有一份原件。问最小复印时间。【分析】妥妥的二分答案,关键在于整个程序的策略。【算法一】首先优先队列算出复印出1到n-1张的时间,同时是,第2到n台机器开启的时间。对于每个询问,如果小于n直接输出,其余情况我们可以二分时间判断能否印ai张复印件。优...原创 2018-10-21 19:06:20 · 270 阅读 · 0 评论 -
进制 base.cpp
【一句话题意】给数p、q、r,已知p、q为十进制数,求最小的b使得在b进制下p*q的值等于r。令t为t在b进制下的值。p、q、t<=1018。有1e4个询问。2<=b<=16,保证有解。【分析】最直观的算法当然是高精度运算,每次从2~16枚举b的值,直接暴力即可。但这样编程复杂度奇高,想我这种既懒,又差错能力低下的人是很不适合的。再对题面进行分析,因为t小于1e18且保证有...原创 2018-10-29 13:53:36 · 201 阅读 · 0 评论 -
置换 perm.cpp
【一句话题意】定义置换a∗b=c为,cbi=ai(1⩽i⩽n)a*b = c为,c_{b_i}=a_i(1 ⩽ i ⩽ n)a∗b=c为,cbi=ai(1⩽i⩽n)现在有一个长度为n的置换p。求大于0的最小的k使得[1…n]pk=[1…n]。k对19184192取模。n<=1e5【分析】刚开始没有看懂题意,在打了一个暴力模拟置换的程序之后才大致明白。无外乎是重复按照p的方式进行置换,...原创 2018-10-29 14:19:20 · 215 阅读 · 0 评论 -
打印费用 Printer
【题意】如同一家正常的打印店一样,当打印的张数大于等于ai时每张打印件的费用为bi。保证ai递增,bi递减。有m&amp;amp;lt;=1e5个询问,问当打印张数为qi时,最小费用是多少。【分析】最小费用应该是按张数打印,或者是额外打印一定张数以减小总体费用。关键在于应该额外打印多少张。我们可以利用bi递减的这个性质。如果定义d=费用*限制张数,如果di&amp;amp;amp;lt;=di+1d_i &amp;amp;amp;lt;=...原创 2018-10-26 16:09:57 · 232 阅读 · 0 评论 -
道路网(map)
【一句话题意】C 国的道路网络由m条双向线路组成,有n个城市在道路网络上。每条线路途经一些城市(可能会经过多次同一城市),最多有li个城市,位于线路上的两个城市a,b 通过i 号线路互相抵达的费用为w[i][a] + w[i][b]。现在有T个询问,询问两城市互相到达的最小费用。n<=1e5;m<=300;li,T,w[i][j]<=2000。【分析】此题暴力spfa可以骗到...原创 2018-10-24 19:54:35 · 517 阅读 · 1 评论 -
数列编辑器 editor.cpp
【简要题意】有五种操作大致是1、在光标前插入一个数2、在光标前删除一个数3、光标左移4、光标右移5、询问从1到k的最大前缀和,保证k个元素在光标前操作数小于等于1e6【分析】此题如果直接模拟,就可以获得80分的好成绩。但是如果再采用延迟更新,也就是向左移和删除时不更新,向右和插入时把元素塞入一个栈中,并对栈进行一顿操作。询问时只要询问栈前k个前缀和中的最大值就可以了,这也是可以...原创 2018-10-30 14:17:50 · 438 阅读 · 0 评论 -
幻象 phantom.cpp
【一句话题意】有n个长度为一的线段,每个点出现的概率为Ai%。一段线段对答案的贡献为它的长度的平方。求答案的期望值。n<=1e6.【分析】由于只要求保留一位小数,所以卡精度可以乱搞搞过。这里有一份乱搞搞过的代码正解是再加一个辅助数组g表示到i的期望长度。然后就会有两组我不会推的方程。L[i] = (L[i-1] + 1)*a[i]%。设f[i]表示前i秒的答案f[i] = f[i-...原创 2018-10-27 16:29:24 · 194 阅读 · 0 评论 -
字符串(p)review学习笔记
目前会持续填充一些字符串的模板,后续会对有关题目进行进一步展开。【Hash】一个比较万能的算法,在Θ(n)\Theta(n)Θ(n)的预处理之后,就可以对两个字符串进行Θ(常数)\Theta(常数)Θ(常数)的比较了。其基本思想是将一串字符串映射成一个数字,通过比较数字来比较字符串。具体上是将每位字母映射成一个值,每加进来一个值,就把前面的值乘上一个位数。这些数用前缀和存起来,需要比较时移...原创 2019-04-06 11:10:45 · 416 阅读 · 0 评论