辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT 先贴代码,有空再填坑 4409[Usaco2016 Feb]Circular barn #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #define ll long long…
1.题意: 给出N个平面上的点.保证每一个点的坐标都是正奇数. 你要在平面上画两条线,一条是x=a,一条是y=b,且a和b都是偶数. 直线将平面划成4个部分,要求包含点数最多的那个部分点数最少. 2.分析:我们首先二分答案...然后我们枚举横着在哪里切开,用两个树状数组维护上下界,        保证四个框框都在mid之内. #include <cstdio> #include <cstring> #include <cstdlib> #include <algo…
先离散化一下(也可以不用 枚举横坐标,用线段树维护两边纵坐标上的节点数. 每次在线段树上二分...(感觉似乎树状数组也行? #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; ; ; struct poi{ int x,y; }a[maxn]; struct yy{ int y,id; }y[maxn];int cnty;…
http://www.lydsy.com/JudgeOnline/problem.php?id=4411 用树状数组维护扫描线 一个树状数组维护扫描线之上的y<=i点,另一个维护扫描线之下y<=i的点 将点按x排好序,开始全部插入扫描线之下的树状数组 枚举x这一条线,线上的在第一个树状数组里加上,第二个树状数组里减去 最大值是一个单峰函数 可以用二分或三分 二分的话,哪边大往哪边移 #include<cstdio> #include<iostream> #include…
4412: [Usaco2016 Feb]Circular Barn Description 有一个N个点的环,相邻两个点距离是1.点顺时针标号为1..N.每一个点有ci头牛,保证∑ci=N.每头牛都可以顺时针走.设一头牛走了d个单位停下了,将耗费d^2的能量.请设计一种牛的走法,使得每一个点上都正好有一头牛,且最小化耗费的能量. Input 第一行一个数N.N <= 100000接下来N行,每行一个数ci. Output 输出一个数表示耗费能量的最小值 Sample Input 10 1 0…
原文链接http://www.cnblogs.com/zhouzhendong/p/8724739.html 题目传送门 - BZOJ4409 题意 有一个N个点的环,相邻两个点距离是1.点顺时针标号为1..N.最初每一个点是空的.要求最终点i存在ri头牛.你有∑ri头牛.你可以选择最多k个点,然后把你的牛任意分配在这k个点里.之后,每一头牛可以选择不动,也可以顺时针走d格并呆在那里.这样,它要耗费d的能量.通过合理选择点.合理分配牛.合理安排牛的走动,使得消耗的总能量最小. $n\leq 10…
根据ccz181078大爷的题解可得(QAQ,每次肯定是断掉连续一行||一列的栅栏... 贪心地想,一个格子与外面联通,显然是先把短的边界断掉(就像mst那样 但是比较蛋疼的是,因为我们每次断的时候,有一些点可能已经联通了,所以有的栅栏不用断>_< 如果我们断了x列栅栏,并且之前有断过行的栅栏,那么下一次断开行的时候,那一行上的联通块个数就是n-x+1..(假设有n行 列上的联通块个数同理 #include<cstdio> #include<iostream> #inc…
题意 上下有两个位置分别对应的序列A.B,长度为n,两序列为n的一个排列.当Ai == Bj时,上下会连一条边.你可以选择序列A或者序列B进行旋转任意K步,如 3 4 1 5 2 旋转两步为 5 2 3 4 1.求旋转后最小的相交的线段的对数. 很暴力的就做了这一题,当选择A进行旋转时,A序列翻倍,然后建一棵主席树,记录点Bi的度数,为了更新用(其实可以O(1)更新),然后长度为n的区间扫一遍. B亦同. #include <cstdio> #include <cstdlib> #…
题目大意 上下有两个长度为n.位置对应的序列A.B,其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4,则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边数量.n <= 10^5. 在Gold里,此题的数据范围是1000,我们完全可以用简单的最长公共连续子序列的DP方法来做. 范围大了之后,可以观察到对于一个数A[i],它所能转移的状态最多只有9个,那么就可以顺序扫描A数组,设F[i][j]表示当前连得最后一条边为(A[i],B[to[i][j]])的最…
先看成一条链 for一遍找位置 在for一遍算答案 #include<algorithm> #include<iostream> #include<cstring> #include<string> #include<cstdio> #include<cmath> using namespace std; typedef long long LL; #define N 100010 int n; ; ],s[N<<]; i…