摘要:
2689 -- Prime Distance 没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西。 题意是,要求求出给定区间内相邻两个素数的最大和最小差。 二次筛法的意思其实就是先将1~sqrt(b)内的素数先筛出来,然后再对[a,b]区间用那些筛出来的素数再次线性筛。代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int N = 66666; 9 int prm[N >> 3], pn;10 bool np[N];11 12 void getbas... 阅读全文
摘要:
Problem - 3635 切切水题,并查集。 记录当前根树的结点个数,记录每个结点相对根结点的转移次数。1y~代码如下: 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 const int N = 11111; 8 struct MFS { 9 int fa[N], tm[N], cnt[N];10 void init() { for (int i = 0; i < N; i++) fa[i] = i, tm[i] = 0, cnt[i] = 1;}11 in... 阅读全文
摘要:
Problem - 4419 题意不难,红绿蓝三种颜色覆盖在平面上,不同颜色的区域相交会产生新的颜色,求每一种颜色的面积大小。 比较明显,这题要从矩形面积并的方向出发。如果做过矩形面积并的题,用线段树做的,这题就只差一个把每个区域计算单独出来的思路了。 这里不详细介绍扫描线,只是说一下针对这题的做法。其实网上有好多版本,都是直接单独计算答案的。然而,我稍微绕了个小弯,我觉得我这种处理方法也是比较容易想到以及实现的。如果我们用7棵线段树计算R、G、B、R||G、R||B、B||G、R||G||B这7种情况,我们并不能直接得到所要的答案。不过可以知道,ans(G)=S(R||G||B)-S(... 阅读全文