摘要:
题意:坐标系上有n个点,每个点的坐标和移动方向速度告诉你,速度方向都是固定的。然后要求一个时刻,使得这个时刻,这些点中最远的距离最小。做法:三分法,比赛的时候想不到。考虑两个点,如果它们走出来的路径能在一定时间后相交的话,那么它们之间的距离肯定是先减小后增大,这样其实可以写成一个二次函数(开口朝下),然后考虑所有的点对之间的最远点,就是对所有的二次函数取一个最大值,嗯,好像还是个二次函数,呃,乱想的,想不下去了。比赛时候想到可能是单调的或者单峰的,现在还是有点想不通,求解答。#define maxn 403const double eps = 1e-5;double x[maxn],y[max 阅读全文
2013年9月11日
2013年8月29日
摘要:
题意:给定无向图,每条边有权值,求该图的一个割集,是的该割集的平均边权最小Amber的《最小割模型在信息学竞赛中的应用》中讲的很清楚了。二分答案k,对每条边进行重新赋值为原边权-k,求最大流,可看这里:http://hi.baidu.com/buaa_babt/item/a08fbb45599dc722fb89602a二分枚举当前的平均边长l,对于边权l的将容量设为边权-l,加入到网络中,求出最小割的和sum,sum加上刚刚那些小于l的边(也是边权-l),如果大于0就意味着l不可作为最小平均边权,小于0就可以,当等于0时直接输出即可。一定要注意精度注意是无向图,还有就是求st割,求解答案。#d 阅读全文
摘要:
以前做过这套题目这个题又重新写了:http://www.cnblogs.com/jh818012/archive/2013/05/05/3182681.html还是以前的思路一直错在一个地方:决策的时候,如果没有走过,直接更新,如果走过,总是选最小值。如果走的是小于mid值的边,那么用tmp = max(dp[x][u] , e[i].val) 更新。代码比以前好多了好像、#define maxn 1005int dp[maxn][maxn];int n,m,k;struct node{ int v,next; int val; int f;};node e[10005 * 2 ];in... 阅读全文
2013年8月27日
摘要:
题意:往集合里面添加删除数,集合中的数是按从小到大排列的,询问下标模5等于3的数的和。记得当时这题不会做,现在想简单多了,只要维护五个值和左右子树的size大小就行了。#define maxn 100005struct node{ int l,r; int sz; i64 f[5]; int mid() { return (l + r ) /2 ; }};node tt[maxn * 3 ];struct node1{ int id ; i64 x;};node1 ml[maxn];void push_up(int root ){ int sz ; sz = tt[... 阅读全文
2013年8月23日
摘要:
题意:维护一个圈,实现六个功能,给某位置起的一些数增加某值,反转某一段数,添加删除某些数,移动当前所指的位置,简单的splay,把圈拆成链,对于每种操作,处理一下。#define inf 0x3f3f3f3f#define keyTree (ch[ ch[root][1] ][0])const int maxn = 222222;struct SplayTree { int sz[maxn]; int ch[maxn][2]; int pre[maxn]; int root , top1 , top2; int ss[maxn] , que[maxn]; void Rotate(i... 阅读全文
2013年8月22日
摘要:
orz众路大神,场场AK。10场多校被虐惨了。只有两场冲击了第一版,第一场是bupt(北邮)出题,这次好像势头很猛,冲进了第一版,rank46 ,过了4个题,还有第八场rank34,做了3题。记得有一次做了5道题,第四场,rank55,记得那一场搞出来一道群论的题目,好开心,因为近世代数书上有二面体群,当时学的时候自己还好好研究了置换群的那些东西,学以致用,好开心。还有第三场,有个Dp题,我很闷骚的写了一个dfs+一个猥琐的高中OI惯用的卡时限的剪枝过掉了那个题目,之前积攒的人品全都掉光了。之后没啥贡献了好像。还有最后两场,终于学以致用了,第九场做了一个后缀数组的题目,虽然就是个模板题吧,而且 阅读全文
摘要:
题意:求一棵树中不在一条链中的三个点的对数。转化一下,用总对数减去在一条链上的三点对数即可。考虑经过根节点,然后可能是不同的子树中各选一个;或者是子树中选一个,然后当前节点为根的子树以外的节点选一个。这样不重不漏代码简单。#define maxn 100005struct node{ int v,next;};node e[maxn * 2 ];int head[maxn];int cnt ;i64 ans ;i64 sum ;i64 sz[maxn];i64 n ;void init(){ memset(head,-1,sizeof(head)); cnt = 0 ;}void add... 阅读全文
摘要:
题意:维护一个文本编辑,并且查询最大前缀和。写了splay,wa了13次过了之后觉着特傻逼。发现题解两个栈就可以了,光标前后维护两个栈,维护前面的栈的前缀和 和 最大前缀和。哎,傻逼,太弱了,还是没仔细分析题目的特殊性质。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define abs(x) ((x)>=0?(x):-(x) 阅读全文
2013年8月21日
摘要:
题意:给定n个矩形,每个矩形有一种颜色,RGB中的一种。相交的部分可能为RG,RB,GB,RGB,问这n个矩形覆盖的面积中,7种颜色的面积分别为多少思路:把x轴离散化做扫描线,线段树维护一个扫描区间竖直方向上的各种颜色的长度刚开始想着直接维护每段区间上7种颜色的长,但是写到删除的时候发现没办法删除,然后想了半天,发现:需要的只是整个区间的颜色长度信息,所以,对于颜色更新来说,不需要往下传标记,只需要维护上push_up就好了所以添加删除就简单多了。用 1 2 4 分别代表R G B 然后RG RB GB RGB 分别为3 5 6 7没有颜色用0来表示线段树每个节点记录下R,G,B 分别被覆盖了 阅读全文
2013年8月12日
摘要:
精确覆盖问题:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1还有重复覆盖问题dancing links 是 一种数据结构,用来优化搜索,不算是一种算法。(双向循环十字链表)参阅了白书训练指南上的模版,目前只有精确覆盖,等再补上重复覆盖struct DLX{ int n , sz; // 行数,节点总数 int S[maxn]; // 各列节点总数 int row[... 阅读全文