02 2014 档案

摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1003感觉自己的dp弱爆了。。以前做的都忘得差不多了,只能从最基础的再学一遍吧。。求最大连续子段和。要知道一个定理,即最大连续子段和中不可能包含负的子段和。对于序列(....i......j,j+1.....),如果sum(i,j) 2 #include 3 const int N=100010; 4 int a[N]; 5 int main() 6 { 7 int t,n,o = 0; 8 scanf("%d",&t); 9 while(t--)10 {11 ... 阅读全文
posted @ 2014-02-28 17:24 N_ll 阅读(149) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1811 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int N=200010; 7 vectorV[N]; 8 queueq; 9 char oper[N];10 int in[N],f[N];11 int a[N],b[N];12 int n,m,sum;13 void init()14 {15 sum = n;16 while(!q.empty()) q.pop();17 ... 阅读全文
posted @ 2014-02-28 14:04 N_ll 阅读(198) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2647#include #include #include #define LL long longusing namespace std;int head[10006],cnt=0;int val[10006];int in[10006];int n,m,num;queueq;struct node{ int u,v; int next;} edge[20010];void add(int u,int v){ edge[cnt].u = u; edge[cnt].v = v; ... 阅读全文
posted @ 2014-02-27 14:55 N_ll 阅读(199) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2094 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N=1010; 6 int num = 0,in[N]; 7 string name[N]; 8 int get_nameid(string s) 9 {10 int i;11 for (i = 0; i = num)15 name[num++] = s;16 return i;17 }18 int main()19 {2... 阅读全文
posted @ 2014-02-27 14:52 N_ll 阅读(279) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1285 1 #include 2 #include 3 const int N=1001; 4 int p[N][N],in[N]; 5 int n,m; 6 void toposort() 7 { 8 for (int i = 1; i <= n; i++) 9 {10 for (int j = 1; j <= n; j++)11 {12 if(in[j]==0)13 {14 ... 阅读全文
posted @ 2014-02-27 14:49 N_ll 阅读(169) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2049题意:有一个迷宫,迷宫中有墙、门和空地。有M道墙,每一道墙用(x,y,d,t)表示,(x,y)表示墙的起始坐标,(d=1,t)表示向上t个单位都是墙;(d=0,t)表示向右t个单位都是墙。有N扇门,用(x,y,d)表示,(x,y)表示门的起始坐标,d=1,表示向上一个单位都是门;d=0,表示向右一个单位都是门。给出Nemo的起始位置(f1,f2),问起点到(0,0)的最少要穿过的门。表示对搜索的题很晕。。看到题不知道该怎么存,看了别人的题解才懂点。。 1 #include 2 #include 3 #include 4 ... 阅读全文
posted @ 2014-02-24 20:59 N_ll 阅读(274) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1400题意:给出一个表达式可能含有多余的括号,去掉多余的括号,输出它的最简形式。思路:先将表达式转化成后缀式,因为后缀式不含括号,然后再转化成中缀式,并根据运算符的优先级添加括号。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 char ss[1010]; 8 int f(char ch) 9 { 10 if(ch=='(') 11 return 0; 12 else ... 阅读全文
posted @ 2014-02-23 21:05 N_ll 阅读(265) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1778题意:有两个DVD,第一个DVD上有编号为1~n1的安装包,第二个DVD上有编号为n1+1~n1+n2的安装包,给出m组关系(a,b) 表示安装a之前必须先安装b。由于安装时每次只能插入一个DVD,问安装完所有的安装包,这两个DVD至少要交换插入多少次。ps:第一次插入算一次,最后一次拔出算一次。思路:两次拓扑排序,以先插入第一个DVD,进行拓扑排序,求出交换次数;以先插入第二个DVD,进行拓扑排序,求出交换次数。最后输出这两种交换次数的最小的值。 1 #include 2 #include 3 #include 4 using... 阅读全文
posted @ 2014-02-22 15:55 N_ll 阅读(378) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1151题意:给出矩形的左上角坐标和右下角坐标(坐标的y轴是向下的),求出矩形面积的并。。今天好困啊。。迷迷糊糊的听会神给讲了讲,敲完之后调试了好久。。原来存错数组了。。看来意识模糊的时候不适宜敲题。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N=550; 6 7 struct node 8 { 9 double x1,y1,x2,y2;10 } p[N];11 double X[N],Y[N];12 bool vis[N][N];1... 阅读全文
posted @ 2014-02-21 21:00 N_ll 阅读(286) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2983题意:给出M条信息,判断这些信息的正确性。(1)V A B :表示A,B之间的距离>=1; (2)P A B X :表示A B之间的距离为x。思路:dis[i]表示i到原点的距离,由(1)知 dis[A]A之间有一条边,权值为-1;由(2)知: dis[A]B的权值为-x,B->A的权值为x。增加一个超级源点,与所有的点相连且权值为0.建图,spfa判断是否有负环(即判断进站次数,若大于点数则存在负环)。若存在负环则信息为假,否则为真。 1 #include 2 #include 3 #include 4 using na 阅读全文
posted @ 2014-02-20 21:28 N_ll 阅读(333) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2406题意:计算一个串中重复因子出现的最多次数,即最多的循环节数。 1 #include 2 #include 3 const int N=1000010; 4 char str[N]; 5 int next[N]; 6 7 int get_next(char *s) 8 { 9 int j = 0,k = -1;10 int len=strlen(s);11 next[0]=-1;12 while(j<len)13 {14 if(k==-1||s[k]==s[j])15 ... 阅读全文
posted @ 2014-02-20 19:39 N_ll 阅读(190) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3368题意:给出一个非降序排列的整数数组,对于询问(i,j),输出区间[i,j]中出现最多的值的次数。思路:经典的RMQ,不过我用线段树做的。首先要离散化,因为是非降序的,所以相同的数是连续的,可以将相同的数分在同一个块中,将块中的信息存储起来,然后将其看成一个点,就可以用线段树进行查询了。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N=1000010; 6 struct node 7 { 8 int l,r; 9 int M... 阅读全文
posted @ 2014-02-20 16:45 N_ll 阅读(465) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3264题意:n个数,q个询问,输出[l,r]中最大值与最小值的差。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int N=1000010; 6 struct node 7 { 8 int l,r; 9 int Max,Min;10 } Tree[N*4];11 int h[N],max1=0,min1=N;12 void build(int l,int r,int rt)13 {14 Tree[rt].l = l;15 ... 阅读全文
posted @ 2014-02-20 13:08 N_ll 阅读(215) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2750题意:在一个圈中取若干个相邻的数,求他们的最大序列和。不能够同时取所有的数。看了一篇解题报告写的很详细。。http://blog.csdn.net/non_cease/article/details/7437690 1 #include 2 #include 3 #include 4 #include 5 const int N=100010; 6 using namespace std; 7 struct node 8 { 9 int l,r,sum,minsum,maxsum;10 int lmax,rma... 阅读全文
posted @ 2014-02-20 10:12 N_ll 阅读(310) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2777题意:有一艘长为L的船,初始颜色为1,将船分为L段,用T种颜色去染。有O种操作,C A B C:表示将区间[A,B]段染成C颜色。 P A B:表示询问[A,B]段中有多少不同的颜色。思路:线段树的区间修改。 1 #include 2 #include 3 #include 4 #define lson l,mid,rt>1; 21 build(lson); 22 build(rson); 23 } 24 void pushdow(int rt)//标记传递 25 { 26 if (Tree[rt... 阅读全文
posted @ 2014-02-19 15:28 N_ll 阅读(450) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2828题意:有n个人排队买票,每个人的位置为pos(0~n-1),价值是val,如果位置相同,来的晚的人可以插入他选的位置。最后输出队列中的val。 1 #include 2 #include 3 const int N=200010; 4 int Tree[N*4],seq[N]; 5 int pos[N],val[N]; 6 7 void build(int l,int r,int rt) 8 { 9 Tree[rt]=r-l+1;//初始每个区间的空位数10 if(l==r)11 return;1... 阅读全文
posted @ 2014-02-18 15:54 N_ll 阅读(196) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3308题意:一个m*n的网格,有L位火星空降兵降落在网格中,地球卫士为了能同时消灭他们,在网格的行或列安装了一个枪支,每行或每列的枪支都能消灭这一整行或整列的空降兵,给出每一行和每一列安装枪支的花费,总的花费等于所有安装枪支的行和列的花费的乘积。求出最小的总的花费。思路:(1)最小割:对于图中的两个点(一般为源点和汇点)来说,如果把图中的一些边去掉,如果它们之间无法连通的话,则这些边组成的集合就叫为割了。如果这些边有权值,最小割就是指权值之和最小的一个割。(2)对任意一个只有一个源点和一个汇点的图来说,从源点到汇点的最大流等于最小割,可以用 阅读全文
posted @ 2014-02-18 08:55 N_ll 阅读(288) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2942题意:n个武士,某些武士之间相互仇视,如果在一起容易发生争斗事件。所以他们只有满足一定的条件才能参加圆桌会议:(1)相互仇视的两个武士不能相邻 (2)同一个圆桌边上的武士数量必须是奇数。输出需要剔除的武士人数。 / \思路:根据图中的关系建立该图的补图,(Tarjan算法)求出图中的双连通分量,判断每个双连通分量中是否存在奇圈,若存在奇圈则该连通分量中的武士都符合条件,否则都不符合 |.| 判断奇圈的方法:由于二分图中不含奇圈,可判断连通分量是否为二分图,若是,则不含奇圈,否则存在奇圈。。 |.| |:| __ ,_|:... 阅读全文
posted @ 2014-02-17 15:09 N_ll 阅读(273) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3352题意:给出一个有n个顶点m条边的无向连通图,问至少添加几条边,使删除任意一条边原图仍连通。思路:一个边双连通图删除任意一条边仍为连通图。故此题即为求原图添加几条边能成为边双连通图。先对无向图中的强连通分量进行缩点,所有的缩点就能构成一棵树,节点之间的连线即为桥。只需将树中的叶子节点相连,就能构成一个边双连通图。叶子节点即为度为1的连通分量。low[i]值相同的点在同一个连通分量中。所加边数=(叶子数+1)/2; 1 #include 2 #include 3 #include 4 #include 5 using namesp... 阅读全文
posted @ 2014-02-16 21:07 N_ll 阅读(515) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3592题意:给出一个n*m的矩阵,左上角代表起始点,每个格子都有一定价值的金矿,其中‘#’代表岩石不可达,‘*’代表时空门可以到达指定格子,求出可以获得的最大价值。思路:时空门的存在可能会使得图中出现环,所以先对强连通分量进行缩点,然后对于缩点后的连通分量建立有向无环图,spfa求到起始点的最长路。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int N=2020; 8 const int... 阅读全文
posted @ 2014-02-16 16:29 N_ll 阅读(284) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1396挺坑的一道题,调试了一天跪在了格式上,要注意的情况很多,样例太没有代表性了,很容易理解错格式。。要注意的情况:(1)(加法、减法) 水平线 '----' 的数量为它相邻两侧字符串的最大长度。 (2)(乘法) 当第二个数为一位数时,’----'的数量同(1); 否则输出两次’----‘,最上面的’-----‘数量同(1),下面的’----‘数量为最后结果的长度。 (3)计算减法的时候,结果要去掉前导0。 (4)注意右对齐,每组数据后有一个空行。样例:(1) 999 1000 100(2) 1231240(3) 8 阅读全文
posted @ 2014-02-16 01:53 N_ll 阅读(490) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3417元宵节+情人节晚上刷的题,纪念一下。。题意:给出n个点,m条边,然后Q个询问,每次询问输入一条边,输出加入此边后桥的个数。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 const int N=205000; 7 using namespace std; 8 struct node 9 { 10 int u,v,w; 11 int next; 12 } edge[N*2]; 13 ... 阅读全文
posted @ 2014-02-14 23:15 N_ll 阅读(278) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3114题意:有n个城市,m条边,由a城市到b城市的通信时间为w,若a城市与b城市连通,b城市与a城市也连通,则a,b城市之间的通信时间为0,求出从s到t的最少通信时间。思路:先由Tarjan算法求出图中的连通分量,则在同一个连通分量里的城市之间的通信时间w更新为0,然后利用spfa求出s城市与t城市之间的最短路,即为最少通信时间。 1 #include 2 #include 3 #include 4 #include 5 #include 6 const int N=505; 7 const int INF=1S; ... 阅读全文
posted @ 2014-02-14 10:29 N_ll 阅读(264) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2186题意:有n头奶牛,给出m对奶牛之间的关系(a,b),表示a欢迎b。欢迎关系是单向可传递的,并且每个奶牛都是欢迎自己的。求出被所有奶牛欢迎的奶牛的数量。思路:求出所有的连通分量(Tarjan算法),然后求出每个连通分量的出度,如果出度为0的连通分量大于一个,则该图不连通,输出0;如果出度为0的连通分量只有一个,则在该连通分量里的点即为受所有奶牛欢迎的奶牛,输出该连通分量里的点数即可。 1 #include 2 #include 3 #include 4 #include 5 const int N=100010; 6... 阅读全文
posted @ 2014-02-13 21:38 N_ll 阅读(153) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3422 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int INF = 1q; 45 q.push(n*n*2); 46 vis[n*n*2] = true; 47 while(!q.empty()) 48 { 49 int u = q.front(); 50 vis[u] = false; 51 q.pop(); 52 ... 阅读全文
posted @ 2014-02-13 13:57 N_ll 阅读(160) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2195题意:在一个n*m的图中,'m'代表人,'H'代表房子,人每移动一次的费用为1,求所有人移动到房子里的最小花费。思路:最小费用最大流问题。关键是建图,建好图后就是MCMF的模板题了。。 关于建图:增加一个原点S,一个汇点T, S与所有人相连,容量为1,花费为0;每个人与所有房子相连,容量为1,花费为|人与房子的水平距离|+|人与房子的垂直距离|;最后所有的房子 与汇点相连,容量为1,花费为0。 关于算法:多次spfa找增广路,然后求最大流。最小花费+=原点到汇点的最小距离*每次增光后的最大流量 1 #i 阅读全文
posted @ 2014-02-12 21:36 N_ll 阅读(272) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1850题意:求所给字符串按照题目的编码规则,它的编码应是多少? 1 #include 2 #include 3 #define LL long long 4 5 double C(int a,int b)//计算组合数C(a,b) 6 { 7 if(a 0)11 {12 res*=(double)a--/(double)b--;13 }14 return res;15 }16 int main()17 {18 char s[120];19 while(~scanf("... 阅读全文
posted @ 2014-02-11 20:55 N_ll 阅读(157) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3020题意:一个矩形中,有N个城市'*',现在这n个城市都要覆盖无线,若放置一个基站,它至多可以覆盖相邻的两个城市。问至少放置多少个基站才能使得所有的城市都覆盖无线?无向二分图的最小路径覆盖 = 顶点数 – 最大二分匹配数/2 1 #include 2 #include 3 const int N=505; 4 int pos[N][N],map[N][N]; 5 int link[N]; 6 bool vis[N]; 7 int dir[4][2] = {{0,-1},{0,1},{1,0},{-1,0}}; 8 int 阅读全文
posted @ 2014-02-11 19:07 N_ll 阅读(186) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3274***** 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int N=100001; 7 const int MOD=99991; 8 int Maxdis,k; 9 int c[N][32],sum[N][32];10 int vis[N][32];11 12 struct node13 {14 int row_i;15 struct node *next;16 }*hash[N];17 bool cmp(... 阅读全文
posted @ 2014-02-11 16:27 N_ll 阅读(168) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3007第一次用STL做的,TLE了,自己构造字符串哈希函数才可以。。TLE代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int main() 8 { 9 int n;10 scanf("%d",&n);11 while(n--)12 {13 int cnt = 0,j;14 char ss[120];15 string str,s,... 阅读全文
posted @ 2014-02-11 16:17 N_ll 阅读(171) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=3468题意:就是区间的查询与更新。。#include #include const int maxn=100010;const int maxm=6600000;#define LL long longstruct node{ int a,b; int l,r; LL sum; LL h;} A[maxm];int Num[maxn],cnt;void build(int root){ int a = A[root].a; int b = A[root].b; int mid = (a+b)>>... 阅读全文
posted @ 2014-02-10 19:51 N_ll 阅读(130) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2892题意:输入n,m。n代表数轴的长度,m代表操作数。 D x: 摧毁点x Q x: 询问村庄x最左与最右没有被摧毁的点的距离R :恢复最后一个被摧毁的点 1 #include 2 #include 3 const int N=50001; 4 int c[N],keep[N],n; 5 bool vis[N]; 6 7 int lowbit(int x) 8 { 9 return x&(-x);10 }11 int sum(int x)12 {13 int res = 0;14 while(x > 0)15... 阅读全文
posted @ 2014-02-10 10:33 N_ll 阅读(305) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1286题意:求用3种颜色给n个珠子涂色的方案数。polya定理模板题。 1 #include 2 #include 3 4 long long gcd(long long a,long long b) 5 { 6 return b?gcd(b,a%b):a; 7 } 8 int main() 9 {10 long long n;11 while(~scanf("%lld",&n))12 {13 if (n==-1)14 break;15 if (n... 阅读全文
posted @ 2014-02-09 21:26 N_ll 阅读(225) 评论(0) 推荐(0)