
ACM
文章平均质量分 69
rptotal
中山大学 信息科学与技术学院 09网络工程
展开
-
sicily 1419
<br />//从中间跑向两边送牛奶,求最小不满意值 = 每个用户收到牛奶的时间+#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int MA = 1001;int f1[MA][MA],f2[MA][MA];int s[MA];int l,p,t,n;inline int mn(int a,int b原创 2010-11-09 22:29:00 · 1281 阅读 · 2 评论 -
HDU 2896 病毒入侵 AC自动机
#include #include #include using namespace std;#define NUM 128#define ST 0#define QMAX 500001struct Node{ Node *fail; Node *nxt[原创 2011-08-03 14:14:01 · 587 阅读 · 0 评论 -
sicily 1108 Online Selection DP
//dp//题意://n组数字,对第i组数字回答 1或0 答案与ai一样就加一分, 回答1跳到第 I1 组 回答0同理//要求给定回答的次数 k、得分m,输出过程中最多选择多少次0//初始从第0组开始回答//dp[p][l][so] 下一组数组是p,当前已选择l次,得原创 2011-08-17 11:53:11 · 949 阅读 · 0 评论 -
POJ 3368 RMQ - ST
//找序列 [a,b]之间出现频率最多的数,输出频率//因为是有序序列所以,可以转化成RMQ,w[i] = num[i]累计出现次数//然后找 [a,b]之间最大的w[i]就可以了//考虑开头的情况,用st[i]存第一个num[i]的位置,ed[st[i]]存最后一个位置原创 2011-08-16 16:45:58 · 703 阅读 · 0 评论 -
Dancing Links 精确覆盖问题的快速dfs
引.精确覆盖问题:给定一个矩阵0-1矩阵,如:101001010判断或输出一些行,这些行的在同一列上有且仅有一个1,如上面的第1和第3行就符合条件。这个问题是NPC问题,必须用搜索。但是解决这么一个问题有什么用呢?一。实际问题转化为精确覆盖问题解决 这里以数独为例。数独的游戏原创 2012-02-28 19:09:21 · 2995 阅读 · 1 评论 -
poj 1442 treap
//顺序插入数字,动态查询第i大的数,每次查询i递增//直接暴treap#include #include #include #include #include using namespace std;#define MX 30010int size, root;struct Node{ int l, r, key, rand_fix; int coun原创 2012-02-29 16:41:35 · 2264 阅读 · 0 评论 -
poj 2352 treap
//15000个坐标,对于每个坐标,其左下方向(含平 垂)坐标的个数就是它的level数//输出各个level坐标个数//之前做过线段树。。现在暴个treap#include #include #include #include #include #include using namespace std;#define MX 15010int size, root;s原创 2012-02-29 16:44:20 · 1174 阅读 · 1 评论 -
poj 2155 二维树状数组
//现在知道的树状数组有两种写法,一个适用擦边查点,一种适用擦点查边//擦点查边的写法比较普通,arr[i] 存的就是i管辖范围内的sum//擦边查点反过来写,此时,插入t到[a,b]相当于插入-t到[0,a-1] 插入t到[0,b] //插入时,arr[i]表示管辖范围内的影响值,当不是全部,实际上查询要不断+lowbit加到暴//二维的也只是插入一个大矩形,恢复三个小矩形的过程#in原创 2012-03-05 13:19:18 · 553 阅读 · 0 评论 -
sicily 1404 第一道 状态DP
#include #include #include #include using namespace std;#define check_i(i, node) ((1<<i) & node) //node第i位是不是有值,含第0位#define MX 0x7f7f7f7fint n, w[11][11];int dp[2<<10][11];int main(){原创 2012-03-04 00:07:51 · 543 阅读 · 0 评论 -
poj 2155 树套树
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include原创 2012-03-05 10:41:09 · 833 阅读 · 0 评论 -
POJ 3734 推公式
/*不做任何限制的组合数是4^n,减去出现奇数个绿色或红色球的情况。思路是从n个球中跳出k个球(k>=1 && k <=n)去染绿色和红色,剩下的球的情况自然是2^(n-k),问题转化为求k个球染两种颜色的组合数,且必有一种球染奇数。、下面公式给出取k个球染红绿且非法的情况2(C(k,1)+C(k,3)+C(k,5)...)。。。*C(n,k)*2^(n-k) 当k为奇数,此式刚好是2原创 2012-03-18 09:54:12 · 1201 阅读 · 0 评论 -
HDU 2222 Keywords Search AC自动机 可做模板
#include #include #include using namespace std;#define NUM 26#define ST 'a'#define QMAX 500001struct Node{ Node *fail; Node *nxt原创 2011-08-03 14:15:16 · 549 阅读 · 0 评论 -
sicily 1370 How many 0's? 递推 规律
//找规律 算m到n有数字中有几个0,包括m n//先设数组 dp[i]表示 i长度,第一个固定且非0的所有数字的0的个数//基于dp从,dp和可以直接算 0到1000000 ,不包括100000//剩下的数字由高位向低位算,分0和非0去暴力就可以了#原创 2011-07-06 14:24:28 · 743 阅读 · 0 评论 -
sicily 1013 poj 2195 km算法
//二分图最小权匹配 km算法//没编过km,上百科找的最大权匹配,改成最小权//最大权原理:将km1[i]置为最大权关联边 km2[i]为0,利用条件 km1[i] + km2[j] >= w[i][j] //每个点都找满足km1[i] + km2[j] == w[i][j] 的交叉路 就完了//找不到 : _used[x] += d _used[y] -= d d = min(km1[i]+km2[j] - w[i][j])//最小权看代码就可以。。#include #i原创 2010-11-13 15:05:00 · 1192 阅读 · 0 评论 -
sicily 1684
<br />//找匹配,要求保证最大权有最小值//一开始开挂 优先队列+无限增广 直接水 3.04s过,发现status都1s内的。。那么水//修改保留每次增边已得匹配边 直接0.1s过~~~#include <iostream>#include <queue>#include <cstring>#include <cstdio>#define INF (1<<29)using namespace std;int n,v,u,d;int _in[501];原创 2010-11-23 00:30:00 · 539 阅读 · 0 评论 -
poj 1141 dp
<br />//输出最优括号匹配 dp#include <iostream>#include <string>using namespace std;string &operator+(string a,string b){ a.append(b); return a;}string dp[101][101];string brackets;int main(){ string maxstr = ""; int maxl = 250; f原创 2011-03-15 12:44:00 · 517 阅读 · 0 评论 -
sicily 1822 dp
<br />//dp 圈 决斗 找可能win的人#include <iostream>#include <cstdio>#include <cstring>using namespace std;int t, n;int win[41][41];int dp[100][100];int get( int k,int n2 ){ return ( k>=n2 )? (k-n2):k;}int main(){ cin>>t; while(原创 2011-03-18 12:10:00 · 1000 阅读 · 0 评论 -
1114 Food Cubes 3D BFS
<br />//3D水广搜 搜有几个被立方体围起来的空白部分//直接搜空白部分 遇到边界表示空白部分不是hole就可以了//在机子上跑样例10s,那个汗呀,硬头皮交上去。。0.33s//我汗,我机子破了#include <iostream>#include <queue>#include <cstdio>#include <cstring>using namespace std;bool visited[101][101][101];int t, n, x,原创 2011-03-21 16:27:00 · 1030 阅读 · 0 评论 -
sicily 1422 Table Tennis 大水
<br />//又一道水题呀 矩形 球在上面45度反弹 从A出发最先到达哪个端点#include <iostream>#include <cstdio>using namespace std;int gcd( int a,int b ){ return b?gcd(b,a%b):a;}int main(){ int a, b; while( scanf("%d%d",&a,&b) != EOF ) { int c = gcd( a, b );原创 2011-03-21 17:13:00 · 1018 阅读 · 0 评论 -
sicily 1898 && 2608 Tree
//给一颗树,节点有白有黑,白节点可以与黑节点交换位置,算出让黑节点连通的最小交换次数//转换问题变成找连通分支块 使得包含黑节点最多即可//树形dp 对node存储一个f[][2]//f[i][1]表示node 子树下(包括自己),包含i个节点的连通分支的最大黑节点数//f[i][0]不包含自己...//答案就是 n-max( f[kk][1],f[kk][0] ) kk是整个图黑节点数原创 2011-05-23 13:59:00 · 648 阅读 · 0 评论 -
poj 2750 线段树 Potted Flower
<br />//被我种得很复杂的线段树。。//找环最大和区间。。不能包涵整个环(扑街的条件啊)//想法其实很简单存储左起最大值,右起最大值#include <iostream>#include <cstdio>using namespace std;#define _mx 100001struct Seg{ int l, r, mxl, mxr, mx; //mxl mxr 左起右起最大值 mx 最大值 int _mxl, _mxr; //左起右起原创 2011-04-12 18:02:00 · 715 阅读 · 0 评论 -
sicily 1192 二分匹配
//求二分图最大独立集,点之间无边//先求最大匹配,剩下的点之间不可能有边,再加上匹配数(每对匹配只取一个人)即可//如果剩下的点中,男的与匹配点中女的有边,就取该匹配的男点//不可能出现不在匹配中的男女两点同时与同一匹配边有边,因为这样会导致增广#include #include #include #include #include using namespace std;原创 2011-07-03 10:25:44 · 620 阅读 · 0 评论 -
高精度
/***************************************************************************************** * 整数高精度 * wengsht * * 基于int数组编的高精度,原创 2010-11-09 17:57:00 · 704 阅读 · 2 评论 -
POJ 2085 treap O(nlogn) 与 贪心 O(n)算法
/* 问题是找出逆序数为m的最小n全排列 * 直接暴过去找出第i轮需要第k小数,k = m-(n-1)*(n-2)/2+1 ,当然如果m比较小就k=1了 * 然后用treap找第k小数就可以了。。 * O(nlogn) * 听说有O(n)的规律。。其实我做这题主要为了找规律。。。结果就这么被我水了过去。。 * 好吧继续找规律 */#include #include #inclu原创 2012-03-19 15:34:38 · 1016 阅读 · 0 评论