摘要: 莫比乌斯反演 一、线性筛 void init() { v[1]=mu[1]=phi[1]=1; int cnt=0; for (int i=2;i<=MAXN;++i) { if (!v[i]) p[++cnt]=i,mu[i]=-1,phi[i]=i-1; for (int j=1;j<=cnt& 阅读全文
posted @ 2020-10-24 23:16 Little09 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 奇怪的搜索技巧:优化搜索 零、bfs有关 双端队列bfs 解决问题:边权只有0与1的最短路 时间:\(O(n)\) 算法的整体框架与一般的广搜类似,只是在每个节点沿分支拓展时稍作改变。如果这条分支边权为0,则从队首入队,否则从队尾入队。这样我们能保证,任意时刻广搜队列中节点对应的距离值都有“两端性” 阅读全文
posted @ 2020-10-24 23:15 Little09 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 离线分治:整体二分与CDQ分治 这两个算法都是离线的分治算法。其中CDQ分治是基于时间的分治算法。整体二分是基于值域的分治算法。先讲讲整体二分吧。 我们拿[ZJOI2013]K大数查询作为例子。 一、原理:将所有的修改和查询操作离线存下来。每次二分所有修改和询问操作,分成两部分解决。 二、每个子问题 阅读全文
posted @ 2020-10-24 23:13 Little09 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 凸壳上的单调队列:斜率优化 一、性质:一种动态规划的优化。 二、前置:dp、单调队列。 三、适用:\(dp[i]=a[i]*b[j]+c[i]+d[j]\)。$a[i]$单调递增。 四、方法: 移项:\(-a[i]b[j]+dp[i]-a[i]=d[j]\),把$b[j]$看作$x$,把$d[j]$ 阅读全文
posted @ 2020-10-24 23:12 Little09 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 广度优先搜索(水的一波~) 每次交换数组里连续两个数 找到第一个合法答案时不要停,继续 找到第二个时输出就好了 上代码 #include<bits/stdc++.h> using namespace std; int n,f[7]; bool flag;//flag表示是否找到了第一个合法答案 st 阅读全文
posted @ 2020-10-24 20:32 Little09 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 零、前言 我这个数学菜鸡决定写一下这道变态的巧妙的数学题的题解。 一、题目 链接:years 题目大意:求$\frac{1}{2}∑_m \frac{C_mk}{C_n^k}$ 二、前置知识 比较简单的几个组合数公式,不过多赘述。 ·公式1:\(C_n^m=\frac{n!}{m!(n-m)!}\) 阅读全文
posted @ 2020-10-24 20:30 Little09 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 这是一篇早期题解,当时不会 \(\LaTeX\) 请见谅。 因为我实在太蒻,写的有点啰嗦了,大佬请见谅谢谢 Part1 前置知识 1.异或运算 2.前缀和 3.莫队 Part2 转化题意 异或是一个很神奇的运算 当然对于前缀和是同样适用的 因此,很容易想到,维护一个前缀和数组sum sum[i]表示 阅读全文
posted @ 2020-10-24 20:21 Little09 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 这是一道挺好的dp题,我的方法会理解起来稍微简单点。 题目大意就不赘述了,我们直接考虑状态。 令$f[i][j][k][l]$表示选$i$组,$j$组[],$k$组()且深度为$l$的组合有几种。但是我们发现这样对于S=AB的状态转移是很难实现的。因为AB的深度都不知道,需要依次枚举。 我们可以考虑 阅读全文
posted @ 2020-10-24 20:20 Little09 阅读(87) 评论(0) 推荐(0) 编辑
摘要: Day1 进考场。开题。 密码一次对。 T1看了一眼。sb类型的模拟。我用了递归(二分当然也可)5min切了(虽然结束后才后悔) 剩下的时间基本在乱搞T2.想了半天只打了个n2的算法。一直在搞链的15分,推式子就是推不出来。看来还是我太菜了啊 T3还是花了大约20min时间打了个暴力的。10pts 阅读全文
posted @ 2020-10-24 20:19 Little09 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 计算机科学 计算机发展史 第一代电子管计算机(1946-1958) 第二代晶体管计算机 (1959-1964) 第三代集成电路计算机 (1965-1970) 第四代超大规模电路计算机 (1971至今) 计算机名人名士 申农(克劳德·艾尔伍·申农 美国人)被称为“数字时代之父”,第一次提出了 bit( 阅读全文
posted @ 2020-10-24 20:18 Little09 阅读(341) 评论(0) 推荐(1) 编辑
摘要: 一道区间dp。 状态很好设,我们可以设 \(dp(i,j,k)\) 表示在 \(a\) 的第 \(i\) 位前取出 \(k\) 个子串与 \(b\) 的前 \(j\) 位一样的方案数。然后发现不是很好转移。 这个时候很容易就想到,我们再设一维0/1,即 \(dp(i,j,k,t)\),$t$表示 \ 阅读全文
posted @ 2020-10-24 20:08 Little09 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 先说点闲话。考场上我只有大概半小时时间做题目,A了前两题后大概就五分钟在这题,乱骗 5 分就被叫走去上物理课去了。主要原因是我觉得以我的水平是完全能A掉这题的,但在考场上因为上课没时间,感到很遗憾,所以就有了这篇题解。 我讲讲我的思路。我们看到这个“旋转180度”很恶心,仔细想后就会发现左上角和右下 阅读全文
posted @ 2020-10-24 20:04 Little09 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 这题是一道小思维题,放在 C 的话难度还是比较低的。 我看有些题解只给了做法没有给证明,所以来说一下。 题意是说如果两个数最大公约数是序列最小值就可以交换。问最小交换次数使得单调不下降。 先给结论:我们先对 \(a\) 数组排序,得到最终数列。考虑每个数,如果这个数不等于最终数列的数并且不能被数列最 阅读全文
posted @ 2020-10-24 20:03 Little09 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 一整棵树的答案很显然是一样的,所以我们可以考虑并查集维护。 我们可以用 \(size_i\) 表示以 \(i\) 为根的子树大小。注意这里,如果 \(i\) 已经是一棵树上的节点,那么就不用维护了。这个显然可以维护:在合并的时候相加即可。 再用 \(ans_i\) 表示以 \(i\) 为根的答案。考 阅读全文
posted @ 2020-10-24 20:01 Little09 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 二分图判定模板题(不知道为什么蓝)。 如果没有同性恋,那么很显然是一张二分图,否则不是。那么只要判定这张图是不是二分图即可。 一个图是二分图,当且仅当图中没有奇环。所以黑白染色即可。 多测记得清空。 #include<bits/stdc++.h> using namespace std; int T 阅读全文
posted @ 2020-10-24 19:59 Little09 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 听说这道题在赛时难倒了好多神仙。其实这只是一个暴力枚举。 首先肯定不能直接贪心做,如果对于某个人去最优的方案,第二个人就不一定最优了。 注意到 \(cnt\) 值很小。所以可以考虑枚举第一个人拿了多少把剑,剩余的肯定尽可能拿战斧。第二个人就可以贪心拿重量小的武器知道拿光,然后拿另外一个。 #incl 阅读全文
posted @ 2020-10-24 19:57 Little09 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 这题其实重题了,但是我没有发现。 考虑怎么弄掉一个区间。要么用操作 $2$ 把它们一次切光,要么用操作 $1$ 把它们切到一个为 $0$,再递归下去。 由于区间不重复,所以不用记忆化,直接做就可以了。 #include<bits/stdc++.h> using namespace std; int 阅读全文
posted @ 2020-10-24 19:54 Little09 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 感觉这道题好像出的水了点,像我这种对期望一窍不通的菜鸡也可以推出来。我的思路好像和大家不太一样(更简单一点吧)……但是好歹过了,大家可以参考一下。 我们设要通过第 \(x\) 个点需要的期望步数为 \(E(x)\)。那么我们可以根据定义推出 \(E(x)\) 的表达式: \(E(x)=\dfrac{ 阅读全文
posted @ 2020-10-24 19:49 Little09 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 先说一句,我 FST 了。 题意就不说了。可以想到,对于一个 \(a_{i+1}\) 相对于 \(a_i\) 来说 \((a_i≠a_{i+1})\),在 \(m\) 个 \(b\) 数组中只需要有一个的 \(b_{i+1}\) 与 \(b_i\) 不同。这是很显然的。 举个例子: 7 = 2 + 阅读全文
posted @ 2020-10-24 19:40 Little09 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 一个奇怪的做法。先算出两个人到达每个标志用的时间,然后枚举所有两个相邻标志之间,检查两车是否在此之间相遇。如果找到了,计算出时间就可以了。 注意一下精度。 #include<bits/stdc++.h> using namespace std; int n,l; int a[100005]; lon 阅读全文
posted @ 2020-10-24 19:39 Little09 阅读(104) 评论(0) 推荐(0) 编辑