IT民工
加油!
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 29 下一页
摘要: 星星的级别就是横坐标小于它,纵坐标不大于它的点个数。因为输入是有序的,纵坐标没有起到作用,所以只要注意x值就行了。用树状数组来实现/*Accepted 376K 110MS C++ 774B 2012-08-07 10:58:07*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1 << 15;int T[MAXN], ans[MAXN];int lowb(int t){ return t & (-t);}void insert(int i){ 阅读全文
posted @ 2012-08-07 12:00 找回失去的 阅读(198) 评论(0) 推荐(1) 编辑
摘要: 算是学了一个模版吧#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>const double eps = 1e-8;struct point{ double x, y;};point a, b, c, d;inline int dcmp(double d){ if(fabs(d) < eps) return 0; return d > 0 ? 1 : -1;}inline double det(double x1, double y1, doubl 阅读全文
posted @ 2012-08-07 10:01 找回失去的 阅读(241) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1325做的第一道二分图匹配的题,应该说代码是很基础的,但是建模确实需要一定的技巧。这也是黑书上的一个例题,将每个任务看成一条边,把A机器的每个模式看成一个X结点,B机器的看成Y结点。任务i为( ai, bj)。这道题求的是最少的点,让每条边都至少与其中一个点关联。这里有一个结论,这个最少点数就是最大匹配数M,黑书的证明如下:(1) M个是足够的。只需要让它们覆盖最大匹配的这M条边,则其他边一定被覆盖 (如果有一条边e不被覆盖,把e加入后得到一个更大的匹配)(2) M个是必需的。仅仅考虑形成最大匹配的这M条边,由于它们两两无公共点, ... 阅读全文
posted @ 2012-08-06 17:02 找回失去的 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 题意是给A和B发糖果,B的糖果数–A的糖果数<=c,也就是B<=A+c,最后求n比1最多多几个糖果。题目只有这一个约束条件,建图不难。将AB看成有向图的边,然后c看成边的权值,转化成最短路来求解,大牛们都说了SPFA+queue会超时,所以用了SPFA+stack。因为这道题没有负权的边,也可以用堆优化的dij来求这个最短路。SPFA + Stack/*Accepted 2396K 532MS C++ 1363B 2012-08-06 15:32:00*/#include<cstdio>#include<cstring>#include<cstdlib 阅读全文
posted @ 2012-08-06 15:34 找回失去的 阅读(242) 评论(0) 推荐(1) 编辑
摘要: 题意是有N头牛,其中有ML对是相互喜欢的,它们之间不能超过一个距离,有MD对是互相不喜欢的,它们的距离不得少于D。在ML中a,b,c分别代表两头牛的编号和最大距离,有a,b中max–min<=c。而在MD中则反过来min-max<=-c.即max<=min+c,min<=max-c.根据这个条件建图,然后求出第一头牛到第n头牛的距离,如果存在,输出这个距离,如果存在负圈,输出-1,不存在答案输出-2./*Accepted 280K 47MS C++ 1803B 2012-08-06 14:53:35*/#include<stdio.h>#include< 阅读全文
posted @ 2012-08-06 14:08 找回失去的 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 这里也要建立<=差分约束系统,判断消息是否可靠看的是建立的图是否存在负圈。如存在则不可靠,不存在则可靠。建立<=的差分系统:由于P A B X 指“确定A到B的距离(边权)为X”从P A B X得到的差分系统为dist[A] - dist[B] >= X && dist[A] - dist[B] <= X 等价于dist[B] <= dist[A] - X && dist[A] <= dist[B] + X则if(dist[B] > dist[A]-X)松弛:dist[B] = dist[A]-X由于 V A B指“只知 阅读全文
posted @ 2012-08-06 13:13 找回失去的 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 做的第一个差分约束的题。读完题后一脸茫然,不会建图。看了算法导论,其实这是一个建立<=差分约束系统的过程。设s[x]=从0到x的所有在集合中的数的个数,则ai到bi的个数即S[bi]-S[ai-1]。因此有:(1)S[bi]-S[ai-1]>=ci。 又根据s[x]本身的性质,后面的一定不比前面的小,后面的最多比前面多一,有:(2)s[i+1]-s[i]>=0(3)s[i+1]-s[i]<=1根据这三个约束条件建图,使图中每一组边,均满足:S[ai-1]<=S[bi]-ciS[i]<=S[i-1]+1S[i-1]<=S[i]建完图,用Bellman-F 阅读全文
posted @ 2012-08-06 13:08 找回失去的 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 看到一个快速幂取模的模版,挺好用的,为了避免中间过程超int,我全部用longlong。#include<stdio.h>#include<string.h>#include<stdlib.h>typedef long long LL;const LL c = 10007;LL a, b;LL exp_mod(LL a, LL b, LL c){ LL r = 1; if(a > c) a %= c; while(b) { if(b & 1) r = (r * a) % c; a = (a * a) % c; b >>= 1; .. 阅读全文
posted @ 2012-08-06 09:39 找回失去的 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 第一次写AC自动机,参考集训手册题解的代码,但是还是花了三个小时的时间才A掉。字符串插入字典树的过程就是一般字典树形成的过程。这里关键在于求失败指针。有点像KMP求next的过程。 对于每个结点,我们可以这样处理:设这个结点上的字母为C,沿着他父亲的失败指针走,直到走到一个结点,他的儿子中也有字母为C的节点。然后把当前结点的失败指针指向那个字母也为C的结点。如果一直走到了root都没找到,那就把失败指针指向root。最开始,我们把root加入队列(root的失败指针显然指向自己),这以后我们每处理一个结点,就将他的所有儿子几点入队。 假设有一个节点k,他的失败指针指向j。那么k,j满足... 阅读全文
posted @ 2012-08-03 15:32 找回失去的 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 和POJ1509没什么区别,只是输入形式上有些许改变,而且这里要求输出的位置是字符串的下标,而不用再加1。/*Accepted 1729 C++ 10ms 276kb Yu*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;const int MAXN = 100100;char s[MAXN];int n, T;int Minpre(){ int i = 0, j = 1, k = 0, x, y; w... 阅读全文
posted @ 2012-08-03 10:05 找回失去的 阅读(162) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 29 下一页