苏子佩blog苏子佩

Hi, Su_Zipei!

世事一场大梦 人生几度秋凉

  • HEOI 苏子佩.

    05 2020 档案

    摘要:前言 今天刚刚学了点分治,赶紧把思路写一下,以防止以后忘记 分析 对于一个点,经过它的路径有两种可能,一是在一棵子树里(下图1-2-4),二是在两个子树里(下图2-1-5)。 那么对于情况二,我们可以把它拆成两条链相加。 对于情况一好像不行,但如果去分类讨论就会让程序更加复杂,但是发现它在它的子树里 阅读全文
    posted @ 2020-05-30 12:51 An_Fly 阅读(110) 评论(1) 推荐(0) 编辑
    摘要:分析 这题除了公式难推一点外没有什么难点了,重要的还是看公式。 首先根据gcd的求法可以知道,F[i][j]=[i+kj][j] 然后接下来的所有式子几乎都利用这个展开。 #include<cstdio> const int lqs=700; int f[lqs][lqs],c[lqs][lqs]; 阅读全文
    posted @ 2020-05-30 07:14 An_Fly 阅读(133) 评论(0) 推荐(1) 编辑
    摘要:分析 获得胜利的情况有两种 一个人不会被拦住,能够一次性走到终点 一个人会拦住另一个人,这时拦人的那个人会赢 #include<cstdio> int main(){ int x,y,xx,yy; while(~scanf("%d%d%d%d",&x,&y,&xx,&yy)){ if(x<=xx&& 阅读全文
    posted @ 2020-05-30 07:12 An_Fly 阅读(133) 评论(0) 推荐(1) 编辑
    摘要:T1 第一种做法,考虑a0,a1,b0,b1a0,a1,b0,b1的因子间的关系。 对于任意一个因子,用k来表示该因子的数量。 一定有 当k_>k_时,kx==ka1,不然gcd一定不为a1k_==k_时,只需要k_x>=k_k_<k_时,gcd一定取不到$k 阅读全文
    posted @ 2020-05-28 22:57 An_Fly 阅读(185) 评论(0) 推荐(1) 编辑
    摘要:分析 暴力做法是从每个点开始跑最短路,显然会T。 进一步优化的话是将边权乘2,这样就不用跑回来了。 但是还是不行,那么有没有办法可以跑一次最短路就解决了呢。 开一个超级源点就行了。 这样从这个点开始跑,一次Dij后得到的就是答案。 #include<queue> #include<cstdio> # 阅读全文
    posted @ 2020-05-26 21:48 An_Fly 阅读(160) 评论(0) 推荐(0) 编辑
    摘要:分析 如果采取暴力的做法,那么乘起来会炸longlong,除非写个高精。 再考虑乘一下逆元呢,显然也不行,模数不一定为质数。 这道题的关键点在于这句话,对于每一个类型1的操作至多会被除一次 这句话的最基本的告诉了我们每次得到的答案一定是一个整数 其次,这句话保证了可以应用线段树解决这个问题 如果除的 阅读全文
    posted @ 2020-05-26 21:45 An_Fly 阅读(181) 评论(0) 推荐(0) 编辑
    摘要:前言 最近或者以前做的一些题目中,总是有一些格子类的题目,大致就是给一个N×M的方格,然后让你求一些东西,我目前见到的解题方法有大致三种: 建图 DP 思维 简单总结一下,有什么漏洞欢迎指出。 首先是和图有关系的,当然那种裸的Floyd就不看了。 这个东西第一眼看见没什么思路,但是要深挖一下它的 阅读全文
    posted @ 2020-05-24 15:46 An_Fly 阅读(153) 评论(0) 推荐(0) 编辑
    摘要:分析 一个图论题,其实没什么特别难的点。 ~~英文题首先我们要读懂题意~~ 这道题大意就是求最短路的条数,如果次短路和最短路只差1,那么也把次短路的条数加上。 求最短路应该都会求,一个Dij就完了,那么条数怎么办。 之前也做过类似的题,如果要更新最短路,那么更新完最短路后,次短路就会更新为原来的最短 阅读全文
    posted @ 2020-05-24 10:14 An_Fly 阅读(131) 评论(0) 推荐(0) 编辑
    摘要:分析 一眼看上去没什么思路,尝试因式分解,可以得到。 (yx)(y+x)=n 然后看到这里其实就有一些思路了,把n分解为两个因数判断一下是不是合法就行。 不妨设a=y+x b=yx,那么合法的条件应该有以下几个 a+b是偶数,因为它等于2y ab也是偶数,因为 阅读全文
    posted @ 2020-05-24 09:58 An_Fly 阅读(127) 评论(0) 推荐(0) 编辑
    摘要:分析 "什么是左偏树" 先来考虑暴力做法,对于每个骑士都做一遍DFS,时间复杂度O(NM),显然会T。 接着考虑一下优化,因为只有这么一棵树,并且,每个骑士不会相互影响,既然这样,那么就只跑一遍DFS,然后一起处理所有的骑士,是不是就可以了呢?但如果我们再遍历一下这个节点的骑士,好像还是没有优化 阅读全文
    posted @ 2020-05-21 08:31 An_Fly 阅读(120) 评论(0) 推荐(0) 编辑
    摘要:分析 ~~啥是竞赛图啊~~ 竞赛图对这个题好像没有很大的影响,考虑什么样的能够传递,其实说白了就是对于一个顶点u,如果他的一条出边的顶点v能够到达x,那么u也能到达x,然后因为只涉及到能不能到达,所以用bitset完美解决。 时间复杂度应该O(Tn2),最多有八组极限数据, 阅读全文
    posted @ 2020-05-21 06:51 An_Fly 阅读(112) 评论(0) 推荐(0) 编辑
    摘要:##分析 这个题又是特殊的最短路问题 等等再说矩阵的问题,因为这个题的范围比较小,所以。。。可以写一个计数DP来解决。 估计看一眼代码就可以明白了。 #include<cstdio> #include<cstring> #include<algorithm> const int N=1e2+10; 阅读全文
    posted @ 2020-05-17 22:15 An_Fly 阅读(185) 评论(0) 推荐(0) 编辑
    摘要:分析 ~~看到括号匹配,先开个栈~~ 这题感觉还是不错的 首先需要知道代价最小的前提是括号序列 合法 ,所以不能单纯的贪心代价小的放法。 对于一个合法的序列来说,左右括号的数量一定相等,并且在当前位置,左括号的数量一定不小于右括号的数量,于是可以开一个栈来存左括号,遇到右括号就弹栈,栈空则不合法。 阅读全文
    posted @ 2020-05-17 18:23 An_Fly 阅读(188) 评论(0) 推荐(0) 编辑
    摘要:分析 做这个题的办法有很多,都是基于一个贪心的思想,既然有最大值,就让它都接近最大值,每有一个限制条件就把区间内的点减1,用差分数组维护就行。当然写个数据结构也行,~~练习线段树?~~ 注意去重。 阅读全文
    posted @ 2020-05-16 10:57 An_Fly 阅读(94) 评论(0) 推荐(0) 编辑
    摘要:分析 ~~这个题想了半天。~~ 最开始想的是不断地BFS,但这样不仅时间复杂度没有保障,而且正确性可能也有问题。 如果门是固定的,还可以考虑像曾经一个题那么做,但现在不行了,因为门不仅不固定,而且还有很多个。 但有一个性质可以考虑,就是每扇门在某一时刻只能走出一个人。 不难想到二分图匹配。 阅读全文
    posted @ 2020-05-16 10:50 An_Fly 阅读(201) 评论(0) 推荐(0) 编辑
    摘要:题意 给定一个长度为m的数组,每个位置上只能取1n的数,并且有些位置不能取一些数,求可能构成的数列的所有数的 积的和 ,也就是先乘起来再加。 分析 一看这数据n的范围已经到了109,显然枚举这个不可能,所以考虑把他们当一个整体用。 如果没有限制,每个位置上可以取的数如下图,idx 阅读全文
    posted @ 2020-05-13 08:39 An_Fly 阅读(128) 评论(0) 推荐(0) 编辑
    摘要:分析 题干很简单,每行每列只能选一个,所以想到了状压DP???然后发现压不下来。。。 于是又想到之前的一道将行和列连边的二分图的题,发现这个也可以。 然后就只剩下了怎么求最小值,因为n的范围较小,所以可以尝试去把所有可能的答案枚举一下,直接枚举显然不可,所以要用到二分答案。 所以就是先求出最大的 阅读全文
    posted @ 2020-05-11 23:06 An_Fly 阅读(95) 评论(0) 推荐(0) 编辑
    摘要:前言 这题让我知道了,大佬写证明,蒟蒻找规律。 分析 "借鉴于此" 首先是一个知识,a+ba xor buv的时候,如果v不超出范围,那么u一定不会超出,设dpi,j表示考虑了当前ab的第i位,且v=a+b=j的方案数。 然后对于 阅读全文
    posted @ 2020-05-10 18:27 An_Fly 阅读(147) 评论(0) 推荐(0) 编辑
    摘要:分析 这个题即使看不懂看题目的要求应该也知道是KM算法吧。。。 emm,首先说为什么是Km算法,因为要求每个行和每个列的和最小对吧,就可以给它们一个项标,KM算法的时候项标初始化都是最大的,而根据算法的不断进行,项标之和只会缩小而不会增大,所以最后匹配完成,所有行和列的项标和最小。 然后详细说一下K 阅读全文
    posted @ 2020-05-10 17:56 An_Fly 阅读(190) 评论(0) 推荐(0) 编辑
    摘要:分析 就是说可以将多个元素从后边移动到前边,让每个数和它对应的下标差的绝对值的和最小,~~语文不好,凑合着理解吧~~ 由于英语也不好,咳咳,最开始以为数是任意的,~~我也不认识那个排列啊~~,后来用的百度翻译,才发现数是一个排列。。。。 然后可以写出一个O(n2)的暴力,就是一个一个的移动,但 阅读全文
    posted @ 2020-05-09 16:38 An_Fly 阅读(187) 评论(0) 推荐(0) 编辑
    摘要:分析 这个题第一眼看见查询的次数就知道不可能每次都跑一遍Dij,看到n的范围就知道Floyd不可,然后想,反正跑的是最短路,用一个最小生成树呗,答案显然是错的。 这样的话1到3的最短路会算成4而不是3,接下来注意到它不断在提的东西,边和点的差值不会很大,也就是说如果搭出一棵树,最短路中大部分边甚 阅读全文
    posted @ 2020-05-09 15:48 An_Fly 阅读(156) 评论(0) 推荐(0) 编辑
    摘要:"题目链接" 分析 这道题应该都能想到缩点+LCA吧,所以其实最难的问题是~~把它写出来~~ 调了一天的我对此很无奈。 首先是缩边双还是缩点双,显然是点双,感性的说,求必须经过的点,所以就缩点双。理性一点呢?理性的说,必须经过的点就是割点,所以把点双缩在一起,注意一个问题,因为求的是割点,所以不要把 阅读全文
    posted @ 2020-05-06 22:45 An_Fly 阅读(104) 评论(0) 推荐(0) 编辑
    摘要:分析 一道思维题,本来想好好写写的,结果调了某道题一天,心情全无,算了吧。 其实挺简单的,首先选区间右端点一定不会差,因为它最高位上有个1,然后开始枚举每一位就行,尽量让每一位都填上1,如果超出了区间范围就不填。 阅读全文
    posted @ 2020-05-06 22:24 An_Fly 阅读(139) 评论(0) 推荐(0) 编辑
    摘要:"题目链接" 分析 ~~话说今天的两道题好像都是SCOI的?~~ 题意就是给定多个限制条件,让你求满足条件的数。 第一眼看成了数位DP,发现不可行,因为可能每个位置都要枚举一遍,于是就会发现,其实每个位置0 9都可以放,除了首位,还有每个限制位置的数字应该相等,不难想到并查集+乘法计数原理。 初始的 阅读全文
    posted @ 2020-05-03 22:22 An_Fly 阅读(120) 评论(0) 推荐(0) 编辑
    摘要:"题目链接" 题意 给定一条链,链上有n个结点,每个点有一个点权 试为每个点分配一个正整数,使得: 若两个相邻点的点权相等,则他们分配的数字也相等 否则点权大的点分配的数字应比点权小的大 分析 这道题其实写起来不是很难,但是思路可能有一点难想吧。 我们发现,如果只考虑上升的序列,这道题就很简单,就直 阅读全文
    posted @ 2020-05-03 17:26 An_Fly 阅读(135) 评论(0) 推荐(0) 编辑
    摘要:"题目链接" 分析 桶排序 ~~不要二分图,不要并查集~~ 这个题最开始感觉读起来不是很难,起码一眼能看懂题意,就是给定n个数对,每个数对里边只能取1个数,构成数列{1……i},问i的最大值是多少,最开始想的是把数对排个序,然后从1开始取,看看能取到几,但发现sort的时间复杂度对这道题 阅读全文
    posted @ 2020-05-03 16:37 An_Fly 阅读(162) 评论(0) 推荐(0) 编辑

    点击右上角即可分享
    微信分享提示