欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4994 题意概括 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数. n<=100000(这个数据范围是我凑出来的,但是我没试过更小的范围,BZOJ上没写数据范围(截止2017-08-24)) 题解 水题,开一个树状数组在线解决. 比如我们顺着扫过去,当到达一个 bj 时,我们求满足条件的 ai,bi 个数,其实就…
Why Did the Cow Cross the Road III bzoj-4994 Usaco-2017 Feb 题目大意:给定一个长度为$2n$的序列,$1$~$n$个出现过两次,$i$第一次出现的位置记为$a_i$,第二次记为$b_i$,求满足$a_i<a_j<b_i<b_j$的个数. 注释:$1\le n\le 10^5$. 想法: 这个题有一个非常不一样的地方. 我记得我之前做过的长成这样的题大概都是第一个位置+1,第二个位置-1即可. 这个题我们只能对第一个位置进行操作.…
题目描述 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 样例输入 4 3 2 4 4 1 3 2 1 样例输出 3 题解 树状数组 WH说是CDQ分治直接把我整蒙了... 把所有数按照第一次出现位置从小到大排序,然后扫一遍.此时一定是满足$a_j>a_i$的. 那么只需要求出$(a_j,b_j)$中以前出现过的$b_i$的数目.使用树状数组维护即可. 时间复杂度$O(n\log n)$ #include &l…
Description 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题解: 方法一: 搞一个KDtree,数一下点即可. 方法二: 对于每个数存一下左端点 $l[a]$ 与右端点 $r[a]$, 按照左端点从小到大进行排序. 枚举到每个数字,就将左端点对应的桶 ++, 右端点对应的桶 --,每次对答案的更新为 $sum[l]$ - $sum[r]$. 为什么呢 ? 假设左端点的 $sum$ 为 $a$, 右端点的…
传送门 发现就是逆序对 可以树状数组求出 对于旋转操作,把一个序列最后面一个数移到开头,假设另一个序列的这个数在位置x,那么对答案的贡献 - (n - x) + (x - 1) #include <cstdio> #include <cstring> #include <iostream> #define N 200011 #define LL long long using namespace std; int n; int a[N], b[N], pos1[N],…
传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, 也就是说在两个i之间只有一个j那么对答案的贡献为1,所以可以用树状数组,当第一次出现一个数的时候,那个位置+1,当第二次出现的时候,第一次出现的位置再-1,也就是把它对答案的贡献去掉,同样是树状数组统计答案 #include <cstdio> #include <iostream>…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格子分开. 如果两头牛可以不经过篱笆走到一起(过程中不能出界),那么他们就是不互相远离的,反之就是互相远离的. 问有多少对牛是互相远离的.注意(x,y)和(y,x)算作同样的. 题解 对于同一区域的牛,我们可以相同对待. 所以我们dfs给各自连通的区域分开来,分别统计每一块的牛数,然后乘法原理+加法原…
Description 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai < aj < bi < bj的对数 Sample Input 4 3 2 4 4 1 3 2 1 Sample Output 3 HINT N<=100000 树状数组维护,一个数出现第一次就加入树状数组,出现第二次的时候统计有多少个数出现一次,并把当前数去掉.记得倒着加入 #include<cmath> #include<cstdio>…
题目描述 Farmer John is continuing to ponder the issue of cows crossing the road through his farm, introduced in the preceding two problems. He realizes now that the threshold for friendliness is a bit more subtle than he previously considered -- breeds …
题目 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 链接 http://www.lydsy.com/JudgeOnline/problem.php?id=4990 题面 上下有两个长度为n.位置对应的序列A.B, 其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4, 则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边数量. n <= 10^5. 输入 The first line of in…
题面:4989: [Usaco2017 Feb]Why Did the Cow Cross the Road 连接 http://www.lydsy.com/JudgeOnline/problem.php?id=4989 题面 上下有两个位置分别对应的序列A.B,长度为n, 两序列为n的一个排列.当Ai == Bj时,上下会连一条边. 你可以选择序列A或者序列B进行旋转任意K步, 如 3 4 1 5 2 旋转两步为 5 2 3 4 1. 求旋转后最小的相交的线段的对数. 输入 The first…
4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 93  Solved: 64[Submit][Status][Discuss] Description Farmer John is continuing to ponder the issue of cows crossing the road through his farm, intro…
4989: [Usaco2017 Feb]Why Did the Cow Cross the Road Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 153  Solved: 70[Submit][Status][Discuss] Description Why did the cow cross the road? We may never know the full reason, but it is certain that Farmer…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4989 题意概括 一条马路的两边分别对应的序列A.B,长度为n,两序列为1到n的全排列.当Ai=Bj时,两边之间会连一条边.你可以选择序列A或序列B进行旋转(只能使队尾或队头位置上的数字变成队头或队尾上的数字)任意K(0<=K<n)步,如123,可以变成 231 或 312.求旋转后,最少的边的交叉数. 题解 两个都可以转,那么我们只需要分别转动两个并统计即可. 旋转一个,那么我们只需要统计逆序…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4990 题意概括 有上下两行长度为 n 的数字序列 A 和序列 B,都是 1 到 n 的排列,若 abs(A[i]-B[j])<=4,则 A[i]和 B[j]间可以连一条边.现求在边与边不相交的情况下的最大连边数量. 题解 我们用dp[i][j]表示枚举到A序列的第i个位置,与B序列的第j个位置匹配,所得到的最大效益,这样显然是要超时的,但是不妨去思考一下. dp[i][j]=max(dp[i-1…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4993 题意概括 有上下两行长度为 n 的数字序列 A 和序列 B,都是 1 到 n 的排列,若 abs(A[i]-B[j])<=4,则 A[i]和 B[j]间可以连一条边.现求在边与边不相交的情况下的最大连边数量. 题解 我们用dp[i][j]表示枚举到A序列的第i个位置,与B序列的第j个位置匹配,所得到的最大效益,这样显然是要超时的,但是不妨去思考一下. dp[i][j]=max(dp[i-1…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4992 题意概括 在一幅n*n的地图上,Amber从左上角走到右下角,每走一步需要花费时间t,每走完3步时,还要加上到达的那个格子的值.这里的3步不包括起动的那个格子.如果刚好3步到达右下角,则右下角格子的值也要算进花费中,否则不用计算进去.求最小花费.n<=100 题解 最短路写一写就可以了,居然不卡spfa! 有一个点要注意:每一个点要建16条边,我就是因为少建了4条边,少了100分…… 是这…
传送门 f[i][j]表示当前第i个,且最后一个位置连接到j 第一维可以省去,能连边的点可以预处理出来,dp可以用线段树优化 #include <cstdio> #include <iostream> #include <algorithm> #define N 100001 #define root 1, 1, n #define ls now << 1, l, mid #define rs now << 1 | 1, mid + 1, r u…
传送门 把每个点和曼哈顿距离距离它3步或1步的点连一条边,边权为3 * t + a[x][y] 因为,走3步,有可能是3步,也有可能是1步(其中一步拐了回来) 最后,把终点和曼哈顿距离距离它1步和2布的点连一条边,边权为 步数 * t 跑一边spfa即可 #include <queue> #include <cstdio> #include <cstring> #include <iostream> #define N 1000001 #define idx…
Description Farmer John is continuing to ponder the issue of cows crossing the road through his farm, introduced in the preceding problem. He realizes that interaction between some pairs of breeds is actually acceptable if the breeds are friendly, a…
Description 上下有两个长度为n.位置对应的序列A.B, 其中数的范围均为1~n.若abs(A[i]-B[j])<= 4,则A[i]与B[j]间可以连一条边. 现要求在边与边不相交的情况下的最大的连边数量. n <= 10^3 Sample Input 6 1 2 3 4 5 6 6 5 4 3 2 1 Sample Output 5 网上有题解说求最长公共上升序列,一脸懵逼,反正我只会DP.设f[i][j]表示A序列选到第i个,B序列选到第j个的最大连线数,转移就十分明显了 #in…
Description 有一幅n*n的方格图,n <=100,每个点上有一个值. 从(1,1)出发,走到(n,n),只能走上下左右. 每走一步花费t,每走三步需要花费走完三步后到达格子的值. 求最小花费的值. Sample Input 4 2 30 92 36 10 38 85 60 16 41 13 5 68 20 97 13 80 Sample Output 31 这题有两种思想,可以强行上一个三维广搜,不过我们也可以用奇技淫巧将第三维省去,因为走三步总共只有16种状态.所以我们就可以强上广…
Description Farmer John is continuing to ponder the issue of cows crossing the road through his farm, introduced  in the preceding problem. He realizes that interaction between some pairs of breeds is actually acc eptable if the breeds are friendly,…
\(\\\) \(Description\) 给定长度为\(2N\)的序列,\(1\text ~N\)各出现过\(2\)次,\(i\)第一次出现位置记为\(a_i\),第二次记为\(b_i\),求满足\(a_i<a_j<b_i<b_j\)的\((i,j)\)对数. \(N\in [1,10^5]\) \(\\\) \(Solution\) 考虑以一个数作为\(i\)出现在答案里,对应的\(j\)应满足\(a_j\in (a_i,b_i),b_j>b_i\).也就是说,我们需要对每一…
Why Did the Cow Cross the Road III 时间限制: 1 Sec  内存限制: 128 MB提交: 65  解决: 28[提交][状态][讨论版] 题目描述 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…
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. 为什么牛过…
[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…
题目背景 给定长度为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…
题目描述 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…
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4993 [算法] 动态规划 转移类似于求LCS [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 1010 int n; int a[MAXN] , b[MAXN]; int f[MAXN][MAXN]; template <typename T> inline void chkmax(T &a…