摘要:
好久没写题解了,都怪这道题! 正解好像可以写矩阵乘法,但是! 本题n看似很大,但是考虑最优解一定是跑到一个顶点后在这个边上来回跑,然后看看跑的差不多了再去终点. 这个边一定是最短边么?不一定的,反例可以随便找啦. 这算离散化么...不懂 那么n就可以缩小到T^2了.而且T<=100,每个点有两条边, 阅读全文
摘要:
刚开始真的没想到什么好算法,然后就看到了数据规模,小于5000...这不是在逗我么. 那么就可以支持n^2的算法了,对于每个点跑一次dfs,每个到达的点记录flag[i][now]=1,最后找最大值并输出. 明明是n^2为啥有快超时的啊?不懂 阅读全文
摘要:
这是一道图论呦. 这怎么和图论相关呢?差分约束不是也看起来和图论无关么2333. 那么本题就类似于差分约束.考虑到矩形的每一条边都有一部分露出来,那么可以m*n的用至少四个点更新每个字母的四个顶角位置.然后对于每个有顶角的字母跑它的四个边,如果有别的字母就说明这个字母再本字母之上,连一条有向边.(在 阅读全文
摘要:
我觉得这个评测机和我有仇,写了read+getchar都会超时这么多,最后好像是ios::sync_with_stdio(false);惹的祸... 昨天想找一些水题来写,就看到了这个模拟"水题",想了一下午都不知道怎么搞. 已知一些牛的颜色和位置,求连续相同颜色或连续两种颜色数量相同的区间右端点位 阅读全文
摘要:
数论还是恐怖啊. 本题用了两次容斥和多次gcd的应用. 题目要求[x,y]中被8整除且不被a[i]整除的数.枚举[x,y]就gg了,临时处理边界也很麻烦,不如用一次容斥原理:ans[x,y]=ans[1,y]-ans[1,x-1]; 那么求ans[1,y]怎么弄呢. 假如现在n=0,答案就是y/8; 阅读全文
摘要:
理解题意就还好吧:刚开始区间内每一个点权值为是s.对于每一个申请,如果能卖就输出yes并卖票,否则输出no. 这不是模拟么?策略都在了.然而c<=30000是会超时的,我们需要一个高级数据结构. 判断能不能卖=询问区间最小值,这个可以用线段树的.而线段树也支持区间修改,这道题就可以开始写了. 输入的 阅读全文
摘要:
说起来,齿轮明明是一块转动的. 这道题概括了数论和图论,是一道很好的水题. 先用一个结构体存一下位置,如果遇见了xi==0&&yi==0的记录一下,它是第一个齿轮.看到n<=1080(好奇怪的数),就直接n^2两两比较齿轮连不连,同时sum[i]++,sum[f]++.最后sum[i]表示第i个齿轮 阅读全文
摘要:
看了一眼题后认为是一个数论,写了写输入后又思考了一下得知第一个值一定是1,扔掉.后面的值全部减1,答案是这些数的一个什么因数个数. 为了避免被坑就去看了讨论,然后就看到了CDC学长的一番话,这个特性是知道的,但是这是怎么和图论扯上关系的啊. 首先,答案小于等于n. 其次,考虑到每个奶牛来的周期越小就 阅读全文
摘要:
上数学课突然联想到了俩小毒瘤题,来与大家分享. 1. (-1,+∞) 2. (-1,3) 第一道题,f(x1)+2随f(x1)减小而减小.那么左边表示f(x)的最小值+2大于左边 这个式子的右边-f(x)随f(x)减小而增大,那么它就要求最小值的相反数小于右边 综上,上式可以转化为 min(f(x) 阅读全文
摘要:
哎就很惨,对着数据模拟改了半个小时后多拿了5分。 这道题要A是要log级别的算法的,这就让我想到了lca。 求路径最小值的最大值,那么那些小边如果不是没了就连不到某个点了是不是就不需要了啊?这样删一条边再删一条边就形成了一个最大生成树。 那么本题的思路最大生成树+lca就出现了。 先按照边权sort 阅读全文
摘要:
嗯~ o(* ̄▽ ̄*)o lca是树上两点的最近公共祖先。如果在同一个分支上就是更靠近根的那个点,否则就是大家一起向上走,第一次能都经过的那个点。 根据这两个性质,我们对于每次询问可以把一个向上走到根节点,标记走过的点。然后从另一个点向上走,直到遇到第一个标记过的点即为lca。 如果整个树是一个长链 阅读全文
摘要:
看到n,m<=100000可以想到这是一个考高级数据结构的题,这个区间修改区间查询让我想到了线段树和树状数组。 然而看了一遍题后眉头一皱,发现并不简单。 它要求输出区间上炸弹种类数,那么维护区间和也不对,维护区间最大值也不对,看来不能直接套模板了。 这个时候需要重新综合考虑修改和查询的内容了。经过思 阅读全文
摘要:
线段树也是一种高级数据结垢,经典的log型。 树状数组能做的事它都能做(单点修改区间求和与区间修改单点查询),它能做的事树状数组不一定能做(区间修改区间查询或查询最大值)。 这里有俩例题,代码风格也不太一样,大家将就一点。 这道题需要单点修改区间查询最大值,用树状数组事维护不了的,只好上一个线段树。 阅读全文
摘要:
本题需要输出对于所有函数值当x取正整数的时候最小的前m个 装作每次询问函数值复杂度为1,直接算的话需要算好多次啊(我承认刚开始以为0<=x<=n)。然后还要排序,复杂度爆炸。 考虑到本题只关注前m个,那我可以从对称轴出发,向左右算m/2个,这样计算的复杂度变成了m*n了,然后还要对数组更改什么的。 阅读全文
摘要:
这个状态压缩还是好看出来的吧?后三个操作决定了所有的状态都是六个六个一循环的。 然后怎么写呢?书上说完压缩之后就不谈了,说让自己写搜索??这咋搜啊,还不是4^C?总之我是不会的。 今天又下定决心来看这题,发现和前几天做的动态规划很像,转移方程如下 初状态是flag[0][1][1][1][1][1] 阅读全文
摘要:
蛤省真的坑,这里跟风学长婊一下。 然后就还算简单吧,一个拓扑排序的事。 记录每个点的入度和出度,写一个栈,把入度为0的放进去。然后开始循环,取出一个点,更新这个点所连点的ans和入度,如果入度也变成0了就把该所连点放进栈里,然后把那个点扔掉。 栈空的时候循环结束,这时所有点都被更新了(吧)。我们需要 阅读全文
摘要:
这是一道二维树状数组模板题。 需要注意的可能只有这些xy有可能为零。那每次输入之后全部++,相当于全部向右下角移了一位。 那就直接给代码了呦。 阅读全文
摘要:
开学啦!又开始了苦逼的生活,完全没有放假够啊。 还是来看题吧…… 一道正常的树上dp。 为什么是树呢?题目中提示的非常清楚了,n个节点n-1条边,每个点都有边,不是树还能是什么? 为什么是dp呢?假如我知道了子节点们的各种数据,那我可以在很短时间内计算出这个节点的数据,叶子节点的数据还巨好求。 怎么 阅读全文
摘要:
高级数据结构?模拟吧? 题目自己理解,又一个考语文的题。 我们每次需要判断在xi上的大于yi的数有几个,以此更新答案,然后把他们都扔掉。如果yi不在上面要放上去。一眼看上去超级奇怪不知道上什么数据结构。 n^2的复杂度是不可以的,然而我见过的n*log2n的那些数据结构都用不上。 于是想到了开一个链 阅读全文
摘要:
我承认是看了这题后想起来和p1864有点重合而且那个坑还没填就去先写了p1864。 那么我可以在较短的时间内处理出每个点到最近的危险点的距离,剩下的就是找路径了。 刚开始我还是想用dfs,但是手残的我调试的并不是很成功。如果每个点只经过一次是不一定优的,因为从这个方向来的和从另一个方向来的最短距离还 阅读全文
摘要:
这道题是不是看起来超级像动态规划什么骚东西啊? 然后机智的我写了一个dfs。 先把所有点的答案弄成一个比1000大的数。然后从每一个绿点出发向向周围dfs,如果四周某个方向比自己加一大就带着自己的加一进去更新它并且继续dfs。直到所有的点再这个绿点存在的情况下能更新都都更新了就去dfs下一个点。 输 阅读全文
摘要:
其实也不算难,搜索一下后模拟就好。第一眼看到的时候看错成密码长度<=10^16,马上就关了。然后一想不可能啊连输入都超时还怎么做,又拐回来看了一眼,就发现还好。 题目要求对密码长度分解成一群平方和的和,数量最少,数量一样时最大的矩阵最大,最大的矩阵一样时第二大的矩阵最大,以此类推。 这个分解操作有点 阅读全文
摘要:
文件夹里都堆了20多道没改完的题了,我却又来开了一个新题。 好在一节课时间做出来了。 求刚好放满m的方案数。这个到是我没做过的,捣腾了半天弄出来转移方程 对于n个物品容积为m的背包跑一遍需要m*n的时间,这样子n*m*n就不行了。 不管怎样,先写出来模板好了 ans[m]即为所求。 我们来深究一下这 阅读全文
摘要:
. 一开始确实想到了dfs,但是感觉挺难搞。 然后想象自己已经知道了答案,那么需要的人数就可以用复杂度为m算出。那么二分答案可不可以呢? 先找到栏杆长度最大的那个值,二分它。判断的时候可以贪心的算,如果当前是x,就让所有人能做这么大就做这么大。如果不够了再少做一些。也就是sum+=o[i]/x,如果 阅读全文
摘要:
这题看上去是难度为2的省选题,类型里写的是搜索,但是真的不是一个模拟水题么? 考虑最最小的解应该是输入个位数,然后是个位数加减2,然后是输入-两位数,然后是个位数加加加加加或者减减减减减,然后是-两位数加加加加加或者减减减减减。那么就挨个考虑每种情况呗。 具体实现看代码 阅读全文
摘要:
本题是一个有趣的有后效性的题目,如果是考察n个数能否等于x大家肯定都会,背包嘛。 但是能否被x整除改怎么写呢?原来的状态不满足后无效性啊。考虑到x较小,最直接的方法就是增加一个维度。 维护一个flag[i][f]表示第i个数时能否组成%x==f,他的转移方程是 但是f如果小于o[i]呢?如果f+o[ 阅读全文
摘要:
哇这题坑是真的多,虽然很警惕还是交了三次。 以前没好好看题还以为超级超级难,就一直没做。今天写了一下觉得就还好,思路好想,不被坑难。 一句话题意:找到大于等于n的约数和的约数和等于自己的第一个数,输出它和它的约数和。 看到s<=18000就可以上一个暴力,枚举每个因数i,i的倍数的那些数的sum[k 阅读全文
摘要:
一道少见的二维dp。 由于后效性就很难搞。 题解中说的是 然后代码能力差的我写了很长时间也没弄出来。 但是我难道不能写一个四重循环嘛?50^4也不超时啊,虽然确实没有三重循环优秀吧。 那么可以推出状态转移方程: (maxx是自己写的一个四数取最大值的函数) 那么AK代码 阅读全文
摘要:
差分是一种很神奇的方法、思路。它将一个数组a[]改写成为a[i]=o[i]-o[i-1],然后可以达到区间修改等许多神奇操作。 考虑长为n的数组a[i]给出m次修改,每次修改区间[l,r],最后问你一个位置a[k]的大小.怎么写? 呵水题,先把修改存起来然后记录下k.再回去看每个修改有没有对a[k] 阅读全文
摘要:
最小生成树十分简单,想求最大边权最小的一个数。我们利用树的性质和单调性,维护所有节点的父节点(刚开始的时候弄成自己)和一个当前用于建树的边数sum。先sort把所有边按边权从小到大排序,然后向后遍历,如果这条边的两端点最大的父亲不一样就令他们合并,并且sum++。当sum==n-1时停下来,答案就是 阅读全文
摘要:
树状数组资瓷的基本操作有两个,第一个是查询前缀和,第二个是单点增加。利用差分的思想可以达到区间增加和单点查询的操作,复杂度全是log元素数量,十分优秀。 (说起来用c[i]减c[i-1]也可以在2*logn的时间单点查询. 我甚至还能存一下本来的数组,就是O(1)了) 如果不用增加了的话也可以建立数 阅读全文
摘要:
非常开心的开始了集训,计划如下 看着就头大,而且有十天都是一中的学长讲的,感觉要回到寒假里的状态了。 那么来总结一下刚学到的迭代加深搜索。 它实质上仍是dfs。在dfs搜到底的代价很大和bfs存不完所有状态时可以使用这种办法。 比如这题: 利用迭代加深可以这样 阅读全文
摘要:
第一眼看到以为也是贪心(毕竟毕竟喜欢贪心的题)。 本题中要求把一个数列改成单调的数列,允许全为一个数。求改动的最少的次数。 最基础的想法是先求出每个位置以前包括自己1、2、3的个数sum1[i],sum2[i],sum3[i]。然后再枚举一的截止位点和二的截止位点,次数就可以直接求出。 公式如下(i 阅读全文
摘要:
题目本来不难,但我不会邻接表哇,所以拖到了现在。 刚开始还以为可以上并查集,但是努力了一下后发现应该不行。 先推一下样例好了。图画出来如下所示: 答案里的三就是这个环的长度。 那么本题的目的就可以得出来了:已知n个顶点和n个边,求图中最小的环的大小。 本题中边的数目较小,是一个稀疏图。而顶点的数目对 阅读全文
摘要:
这道题之前听LZD说过,困扰了他好久。那困扰我两天应该不丢人吧嘿嘿嘿。 这部分是误解,觉得智障的可以直接跳到下一个部分了 首先我知道可以用暴力搜索判断每一个正方形的对角线以外的地方有没有鱼(我还以为只要满足这个就可以了,没想到对角线上的鱼也要保证连续)。这个方法的复杂的原因在于枚举正方形与判断对角线 阅读全文
摘要:
这都被你发现了? 2552552550 阅读全文
摘要:
这次考试我能不能说还算满意。。 第一题是寻找和最小的两个因子,输出二倍的和。那肯定是在根号两边了,图省事就写了个 虽然也正确,但是不是最好的解法。如果从根号s+1向下循环的话肯定比向上走%起来快,于是丢了10分。被称为灵魂A题。。。难过 1 #include <cstdio> 2 #include 阅读全文
摘要:
关于二分的重要性 这题,题意是没有看懂的(汉),但是看懂了图,那就搞吧。 写了一个数组大小为50010的后发现大数据是会越界的。嗯嗯?这不是一个水题么?于是仔细阅读题目后发现:如果还想用数组记录下每个时刻的位置的音符的话是要开50000*50000的一维数组的,肯定是爆炸的。 于是想到了前缀和,但是 阅读全文
摘要:
第一次正规的多校训练赛,由于多种原因考的非常差,30分。 第一题是一道数论题,应该属于很简单的那种,打几个if就行。然后就写了一个暴力版本找规律: 以对角线为界,下面的都是1赢,下面的都是2赢。而对角线上的情况则是a%2==1是a赢,a%2==0时b赢。 而我考试结束的时候的版本没有删掉freope 阅读全文
摘要:
快读快写的原理就是利用getchar()和putchar()巨快的特点进行读入,cin、cout就不说了,听说它比scanf还快,很厉害的。 正常版的话就是利用getchar()读入,对读到的数字处理: 1 #include<string> 2 #include<cstring> 3 #includ 阅读全文