P3662 [USACO17FEB]Why Did the Cow Cross the Road II S 题目描述 The long road through Farmer John's farm has NN crosswalks across it, conveniently numbered 1 \ldots N1…N (1 \leq N \leq 100,0001≤N≤100,000). To allow cows to cross at these crosswalks, FJ in…
题面 大意:让你把两个n的排列做匹配,连线不想交,而且匹配的数字的差<=4,求最大匹配数 sol:(参考了kczno1的题解)对于第一个排列从左往右枚举,用树状数组维护到达另一个序列第i个数字的最大值. #include <cstdio> #include <algorithm> using namespace std; ; int n,a[N],b[N],f[N],t[N]; #define lowbit(x) ((x)&(-x)) inline void ins(…
P3663 [USACO17FEB]Why Did the Cow Cross the Road III S 题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of roads, making it impossible for his cows to travel around without crossing many of them. 为什么牛过…
//神题目(题目一开始就理解错了)... 题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of roads, making it impossible for his cows to travel around without crossing many of them. 奶牛们为什么要穿马路?一个原因只是因为FJ的牧场的路实在是太多了,使得奶牛们每…
题目地址 又是一道奶牛题 从左到右扫描,树状数组维护[左端点出现而右端点未出现]的数字的个数.记录每个数字第一次出现的位置. 若是第二次出现,那么删除第一次的影响. #include <cstdio> #include <cstring> #define re register #define GC getchar() #define Lowbit(X) (X&(-X)) #define Clean(X,K) memset(X,K,sizeof(X)) int Qread…
题目背景 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题目描述 The layout of Farmer John's farm is quite peculiar, with a large circular road running around the perimeter of the main field on which his cows graze during the day. Every morn…
本题是练习前缀和的好题!我们可以枚举前端点,确定一个长度为k的区间,然后利用前缀和统计区间内损坏的灯的数量,最后取最小值即可.AC代码: #include <bits/stdc++.h> using namespace std; inline int read()//快速读入 { ,x=; char c=getchar(); ') { ; c=getchar(); } ') { x=x*+c-'; c=getchar(); } return f*x; } ],s[],sum=; int mai…
题目描述 The long road through Farmer John's farm has  crosswalks across it, conveniently numbered  (). To allow cows to cross at these crosswalks, FJ installs electric crossing signals, which light up with a green cow icon when it is ok for the cow to c…
嘟嘟嘟 考虑dp. 对于ai,和他能匹配的bj只有9个,所以我们考虑从这9个状态转移. 对于ai 能匹配的一个bj,当前最大的匹配数一定是[1, j - 1]中的最大匹配数 + 1.然后用树状数组维护前缀匹配数最大值就行了. #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<cstdlib>…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4990 [算法] 首先记录b中每个数的出现位置 , 记为P 对于每个ai , 枚举(ai - 4) - (ai + 4) , 将Pj从大到小加入序列 然后求最长上升子序列即可 , 详见代码 时间复杂度 : O(NlogN) [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 1000010 int n , l…
题目大意:给你两个序列,你可以两个序列的点之间连边 要求:1.只能在点权差值不大于4的点之间连边 2.边和边不能相交 3.每个点只能连一次 设表示第一个序列进行到 i,第二个序列进行到 j,最多连的边数,容易得到方程: 不连边: 连边: 实际是这样的,每个位置如果想连边,就要从能连边的位置之前找最大值,即 直接转移不可取,由于最多只从9个位置转移,我们可以缩减一维,用记录b序列进行到位置 j 的最大连边数,再用树状数组维护的最大前缀和方便转移 #include <bits/stdc++.h>…
[USACO17FEB]Why Did the Cow Cross the Road III P 考虑我们对每种颜色记录这样一个信息 \((x,y,z)\),即左边出现的位置,右边出现的位置,该颜色. 于是统计的是\(x < x_2,y > y_2,|z - z2| > k\)的数对数量. 因为\(CDQ\)分治的过程是,第一维事先排序,第二维递归进行,第三维用数据结构统计,所以 上述这个数量是很好处理的. // Problem: P3658 [USACO17FEB]Why Did th…
题目大意:给你两个序列,可以序列进行若干次旋转操作(两个都可以转),对两个序列相同权值的地方连边,求最少的交点数 记录某个值在第一个序列的位置,再记录第二个序列中某个值 在第一个序列出现的位置 ,求逆序对数量即可 本以为是一道逆序对水题,结果被卡了20分.看了题解才恍然大悟,实际上,序列可以旋转 ≠ 序列成环,由于逆序对的特殊性(并不适用于环),故不能把一个序列单独旋转看成它们的相对移动,正着旋转一个序列≠反着旋转另一个序列(更详细证明可以看洛谷) 所以我们要对两个序列再反着进行一次同样的操作…
题意 两列$n$的排列,相同的数连边,如果一对数有交叉且差的绝对值$>k$,则$++ans$,求$ans$ 题解 可以把每一个数字看成一个三元组$(x,y,z)$,其中$x$表示在第一列的位置,$y$表示在第二列的位置,$z$表示权值 两条线交叉,就是$x<x'$且$y>y'$,又要满足差值的绝对值小于等于$k$,就是$|z-z'|<=k$ 于是就转化为了一个三维偏序问题,直接上CDQ 具体细节请看代码 // luogu-judger-enable-o2 //minamoto #i…
题目描述 Farmer John's cows are trying to learn to cross the road effectively. Remembering the old "why did the chicken cross the road?" joke, they figure the chickens must be experts on crossing the road, and go off in search of chickens to help th…
题外话:维护区间交集子集的小套路 开两个树状数组,一个维护进入区间,一个维护退出区间 $Query:$ 给定询问区间$l,r$和一些其他区间,求其他区间中与$[l,r]$交集非空的区间个数 用上面维护的信息表示,就是$r$(含)前进入的区间个数$-l$(不含)前退出的区间个数 这个题: 我们可以把它抽象为,求区间对个数,要求区间对交集非空且互不包含 尝试像上面那样解决,$l$后进入$-r$后进入保证左端点满足要求,$l$后进入$-r$前退出,右端点满足要求 但是放到一起好像就有些问题了,尝试减掉…
一开始想写$DP$,发现直接转移完全有后效性 所以本小蒟蒻写了个最短路 每走三步就要吃草是这个题最难搞的地方,我们建图时不妨只对于距离等于三的点连边 考虑完全覆盖所有情况,从一个点走一步,两步,然后三步,和直接走三步代价是等价的 这样从每个点到与其曼哈顿距离为三的所有点连边即可 考虑到终点的答案,对于所有小于三步到终点的位置到终点的代价,找到最小值即为答案 有个坑就是比如右左右这种走法,我们也需要从一个点向其周围的点连边 #include<iostream> #include<cstdi…
嘟嘟嘟 首先看到这种序列的问题,我就想到了逆序对,然后就想如何把这道题转化. 首先要满足这个条件:ai <bi.那么我们把所有数按第一次出现的顺序重新赋值,那么对于新的数列,一定满足了ai < bi. 因为要转换成逆序对,所以先出现的数赋成更大的值,得到了ai > bi. 接下来的操作都是在新的序列上进行的:像原来求逆序对一样从后往前扫,则扫到的第一个数实际上是该数第二次出现,这时候统计已经出现的比他小的数的个数,那么这些数和它构成的数对满足要求,累加到答案中.然后为了以后的查询,在树状…
题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of roads, making it impossible for his cows to travel around without crossing many of them. 奶牛们为什么要穿马路?一个原因只是因为FJ的牧场的路实在是太多了,使得奶牛们每天不得不穿梭在许许多多的马路中央 FJ's…
题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of roads, making it impossible for his cows to travel around without crossing many of them. 为什么牛过马路? 其中一个简单的原因就是农民约翰的农场有很多道路,使得他的母牛不得不穿越许多道路. FJ's farm…
题目链接 Solution 二维偏序问题. 现将所有点按照左端点排序,如此以来从左至右便满足了 \(a_i<a_j\) . 接下来对于任意一个点 \(j\) ,其之前的所有节点都满足 \(a_i<a_j\) ,但是还要满足 \(a_j<b_i<b_j\) . 所以可以考虑将每一个点的右端点插入树状数组,而 \([a_j,b_j]\) 之间 \(b\) 的数量即为当前点的答案. Code #include<bits/stdc++.h> #define N 50010 #d…
Link 题意: 给定长度为 \(2N\) 的序列,\(1~N\) 各处现过 \(2\) 次,i第一次出现位置记为\(ai\),第二次记为\(bi\),求满足\(ai<aj<bi<bj\)的对数. 转化一下题意:求 \(a_i - b_i\) 中出现次数为 \(1\) 的个数. 既然数据范围那么小,直接上莫队. 先预处理出每个数第一次出现以及第二次出现的位置. 然后就变成了我们熟悉的区间问题.就可以套用莫队的板子啦, 但最后答案要除以 二,因为 \((x,y)\) 这两个数对,你在 \(…
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师)的掌握程度 考完试有人说这题是马拉车,吓死我了 首先,你把数据读入之后,先用一个大法师把以每个节点为根的子树的大小和权值都预处理出来,方便待会剪枝 然后,你对以每个节点为根的子树,都判断一下以下条件(这时刚才处理的东西就有用了) ① 左子树和右子树的节点数是否相等 ② 左子树和右子树的权值是否相等…
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种是通过分成 多块后在每块上打标记以实现快速区间修改,区间查询的一种算法.根号 分治与其思路相似,将原本若一次性解决时间复杂度很高的问题分块去解 决来降低整体的时间复杂度. 例题 以本题举例子哈希冲突 本题作为论文的第一道题目,是一道很好的练习题,注意,本体给出的 \(value[i]\) 是 \(i…
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 LCP 长度数组 \(p\). 数据范围:\(1\le |a|,|b|\le 2\times 10^7\). 蒟蒻语 别的题解为什么代码那么长.讲解那么复杂?蒟蒻不解,写篇易懂一点的,希望没有错误理解. 注意:蒟蒻的下标是从 \(0\) 开始的. 蒟蒻解 定义 \(z(i) (i>0)\):后缀 \(…
题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \(\max_{k=l_i}^{r_i}h_k=g_i\).求满足条件的 \(h_i\) 的方案数膜 \(998244353\). 数据范围:\(1\le T\le 20\),\(1\le l_i\le r_i\le n\le 9\cdot 10^8\),\(1\le g_i\le A\le 9\cdo…
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积的讲解. 三位向量的运算 模长: 即向量长度,\(|\vec{a}|=\sqrt{x_a^2+y_a^2+z_a^2}\). 点积: 标量 \(\vec{a}\cdot\vec{b}=|\vec{a}||\vec{b}|\cos<\vec{a},\vec{b}>=x_ax_b+y_ay_b+z_a…
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) 互不相等.将糖果和药片一一对应,求 糖果能量大于药片 比 药片能量大于糖果 多 \(k\) 组的方案数. 数据范围:\(1\le n\le 2000\),\(0\le k\le n\). 萌新初学二项式反演,这是第一道完全自己做出来的题,所以写篇题解庆祝并提升理解. 有 \(\frac{n+k}{2…
洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\texttt{D x}\),删除第 \(x\) 个字母. \(\texttt{R x y}\),反转当前文本中的区间 \([x,y]\). \(\texttt{P x}\),输出初始文本中第 \(x\) 个字母在当前文本中的位置.特别地,若不存在,输出 \(0\). \(\texttt{T x}\),输…
By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节:1.需要判断它的月份是否超出122.每一个月份的日期可能不同3.闰年不需要判断,只需要把每年的2月都看为是29天就可以4.判断月份的时候,一定要%1000/100去判断,不然会出现1月和11月一样,10月被直接扔掉,2月和12月一样的情况(我就是这样得了60分).. #include<iostrea…