随笔分类 -  奇技淫巧

摘要:考虑按顺序暴搜子序列。如果序列中的数两两不同,显然每次给上一个找到的子序列添上后缀最小值,即为下一个要找的子序列。如果不能再加了就回溯继续考虑后缀次小、第三小……值,直到找到k个子序列。 有重复的数后,考虑后缀k小值只取第一次出现的位置,并在每找到一个子序列后就统计其出现次数。显然这样就能找到所有要 阅读全文
posted @ 2019-02-14 19:09 Gloid 阅读(289) 评论(1) 推荐(0)
摘要:打表可以发现相当于不存在长度>=3的递减子序列。 考虑枚举在哪一位第一次不卡限制。注意到该位一定会作为前缀最大值。判掉已确定位不合法的情况后,现在的问题即为求长度为i、首位>j的合法排列个数,设其为g[i][j]。 由于首位>j,1~j在排列中一定依次出现,并且在j出现之前,>j的部分也一定单增。于 阅读全文
posted @ 2018-12-27 21:19 Gloid 阅读(225) 评论(0) 推荐(0)
摘要:考虑奇技淫巧。 首先是k=2。对向量维护一个前缀和,每次将当前向量与前缀和点乘。如果点乘结果不等于i-1&1,说明当前向量至少和之前的某个向量的数量积是2的倍数,暴力找就可以了。当然等于i-1&1也不一定就不存在,这本质上还是个随机算法,于是先random_shuffle一下。 k=3时,注意到12 阅读全文
posted @ 2018-09-19 19:28 Gloid 阅读(133) 评论(0) 推荐(0)
摘要:这个东西似乎叫摩尔投票法。注意到这里众数的出现次数大于其他数的出现次数之和。考虑cnt表示当前所找到的众数比其他数出现次数多多少,每次更新如果cnt<0就把众数选做当前数。正确性感性理解一下,不妨把非众数的数看成同一种数,这样的话正确性显然,现在非众数的数可能不一样那就更对了。 阅读全文
posted @ 2018-08-31 13:29 Gloid 阅读(151) 评论(0) 推荐(0)
摘要:显然这样的路径一定是选择了与1相邻的不同的两点分别作为起点和终点(除1本身)。如果能将每一组起点终点都计算到就可以得出最优解了。暴力显然不行。注意到我们每次求出的是单源最短路径,考虑如何充分利用信息。那么有一种神奇的方法:按照编号的二进制的某一位给所有与1相邻的点分组,一组作为起点另一组作为终点,然 阅读全文
posted @ 2018-08-28 02:31 Gloid 阅读(256) 评论(0) 推荐(0)
摘要:首先将完全相同的边的权值累加。考虑这样一种trick:给边确定一个方向,由度数小的连向度数大的,若度数相同则由编号小的连向编号大的。这样显然会得到一个DAG。那么原图的三元环中就一定有且仅有一个点有两条入边了。并且每个点的出度不会超过√m,因为假设一个点连出了x条边那么其所连向的每个点也至少会有x条 阅读全文
posted @ 2018-08-24 21:20 Gloid 阅读(299) 评论(0) 推荐(0)
摘要:两个串匹配时相匹配的位置位置差是相同的,那么翻转一个串就变成位置和相同,卷积的形式。 考虑如何使用卷积体现两个位置能否匹配。一个暴力的思路是每次只考虑一种字符,将其在一个串中设为1,并在另一个串中将不是该字符且不是通配符的设为1,卷积结果不为0则无法匹配。这样要跑26次1e6的FFT,就算有6s也… 阅读全文
posted @ 2018-08-09 23:14 Gloid 阅读(178) 评论(0) 推荐(0)
摘要:首先有序整数拆分有个显然的递推式是g(n)=Σg(i) (i=0~n-1),即枚举加入最后一个数之前和是多少。(虽然不用递推式也能显然地知道答案是2n-1)。 类似地,lqp拆分有递推式f(n)=Σf(i)fib(n-i) (i=0~n-1)。由乘法分配律就可以推出。特别地,f(0)=1。 又是一个 阅读全文
posted @ 2018-08-08 20:43 Gloid 阅读(259) 评论(0) 推荐(0)
摘要:上一题的强制在线版。对图跑出一个dfs树,给非树边赋上随机权值,树边的权值为覆盖他的非树边权值的异或。这样如果某条树边和覆盖他的非树边都被割掉(即图不连通),他们的异或值就为0。每次对询问看有没有子集异或值为0即可,可以简单地用线性基搞定。 阅读全文
posted @ 2018-07-28 16:32 Gloid 阅读(319) 评论(0) 推荐(0)