自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

转载 TCP,UDP,HTTP 协议

先来一个讲TCP、UDP和HTTP关系的1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。

2013-05-20 12:25:06 594

原创 hdu 3255 Farming(线段树求长方体体积并)

把价值p看做这个矩形上的高也就是长方体了。然后解法与线段树求矩形并差不多,就是多了一个枚举高度的循环。#include#define maxn 30010#include#includeusing namespace std;typedef struct{ int l,r,y,s,h,tag;}Seg;Seg ss[4*maxn]; int sum[10*maxn]

2012-10-18 20:36:05 1338

原创 hdu 1542 (poj1151) Atlantis ( 线段树求矩形面积并)

离散化+扫描线+线段树。 虽然这题直接离散化也能过,但想要学习一下线段树求矩形并,就网搜各种线段树求矩形并的方法。其实做法还是跟离散化的做法差不多。先介绍离散化+扫描线的做法(这种情况适应矩形数目不是很多的时候):1,将矩形的四条边无限延长,则将平面区域分为了多个小矩形区域。我们要求的区域面积就是其中一些的小矩形的面积的和。(这一步只是理解,无实际操作)2,分别将上述水平的划分线和竖直

2012-10-18 00:05:13 1324 1

原创 poj 3667 Hotel

线段树处理区间合并问题。#include#define MAX 50010#includeusing namespace std;int L[4*MAX+1],R[4*MAX+1],M[4*MAX+1],covered[4*MAX+1];void pushup(int l,int r,int rt){ int k=R[rt<<1]+L[rt<<1|1]; int m=(

2012-10-16 21:02:14 478

原创 hdu 3308 LCIS (线段树)

线段树处理区间合并的问题。主要是记录一个区间包括左端点的最长的长度,包括右端点的最长的长度,整个区间的最长的长度,这三个信息。这样在合并两个区间时有足够的信息支持求出合并后区间最大的连续递增序列的长度。查询时注意细节,特别是(a,b)分两段查询时,具体见代码。#include#include#include#define MAX 100010using namespace std;

2012-10-11 22:04:51 614

原创 hdu 2665 (poj 2104) 划分树

poj2104题目要求弱一些,n个数是不同的。hdu2665中没有这样的限制。所以在划分左右区间时需要处理一下相同的数怎么划分。#include#include#include#define M 100010using namespace std;int tr[20][M],num[20][M],sorted[M];void build(int l,int r,int d){

2012-10-10 15:53:11 586

原创 KMP

#include#includeint next[100];char S[100],T[100];void getnext(char* T,int m){ int k,j; next[0]=-1; k=-1; j=0; while( j < m ) { if( k==-1 || T[k]==T[j] ) {

2012-10-08 17:04:30 444

原创 hdu 4412 Sky Soldiers (dp)

具体思路的解释见  http://hi.baidu.com/renxl51/item/d7437a30bca43883f4e4ad0df[i][j] 表示用j个点覆盖前i个点。  f[i][j]=min{ f[k][j-1] + cost }  ( j-1 #include#include#include#include#define INF ((1<<23)-1)u

2012-10-07 19:53:42 1045

原创 hdu 2844(背包)

#include#include#includeusing namespace std;int dp[100010],w[110],c[110];int main(){ int n,m,i,j,k,cnt; while( scanf("%d%d",&n,&m),n+m ) { cnt=0; memset(dp,0,sizeof(d

2012-10-06 19:31:06 853

转载 块状链表

/** 本模板支持以下操作:* 1.在任意位置插入一个整数* 2.插入一个块(Block),包含多个整数* 3.删除一个整数* 4.输出第i位上的整数* 注意:所有Insert(pos,data),均是在pos之后插入。* BlockList::N是sqrt(n)的结果,它决定了块状链表的效率*/#include #include #include #include #d

2012-10-06 10:09:52 1391

转载 扩展欧几里德

int extended_euclidean(int n, int m, int &x, int &y) { if (m == 0) { x = 1; y = 0; return n; } int g = extended_euclidean(m, n % m, x, y); int t = x - n / m * y; x = y; y = t; return

2012-10-05 18:18:02 429

转载 hdu4277 USACO ORZ

import java.util.HashSet;import java.util.Scanner;public class Triangle { int a,b,c; int arr[]=new int[1010],n,sum; long M=200010; HashSet mp=new HashSet(); void dfs(int d){ if(d>n){ if(a

2012-10-05 16:33:19 481

原创 poj 1635( 树的最小表示法判断同构 )

#include#include#include#include#include#includeusing namespace std;string dfs(char* ss,int s,int t){ int i,j=s,h=0; int cnt=0; vector str; str.clear(); if( s>=t ) { s

2012-10-05 11:38:13 1640

原创 hdu 4276 The Ghost Blows Light

先找到1到n的路,然后对这条路上的每个点进行一次树形dp,最后对路上的点再dp一次。#include#include#include#includeusing namespace std;vector s[220];int w[210]; int cost[110][110],mark[110]; int N,T,sign,tt;int dp[210][510],f[110][510

2012-09-20 20:23:42 628

原创 hdu 4274

其实这题挺水的,当时就老往并查集上想,搞得昏天暗地的。#include#include#include#define LL long long#define INF (1<<31-1)using namespace std;vector son[10010];int L[10010],R[10010]; int ans; int sum[10010];void initia

2012-09-15 11:10:44 721

原创 hdu 4268 贪心

STL是多么重要啊。#include#include#includeusing namespace std;typedef struct{ int h,w;}Node; Node Alice[100010],Bob[100010]; multiset s;int cmp(Node a,Node b){ if(a.w==b.w) return a.h<b.h;

2012-09-11 23:29:15 740

原创 hdu 4267

按余数对数分组,tree[i][j]表示被i除余j的数的序列; 然后用10*10个树状数组就可以做了。是区间更新,单点求值。#include#define lowbit(x) ((x)&(-x))#includeint tree[11][11][50002];int a[50002]; int n;void update(int k,int i,int j,int c){

2012-09-11 16:56:43 536

原创 字典树的两种实现

hdu1251  动态链表实现:#include#includeusing namespace std;typedef struct Node{ int prefix; Node* next[27]; Node(){ prefix=0; memset(next,0,sizeof(next)); }}Node;Node rt; char c='a';No

2012-09-06 15:27:32 1866

原创 hdu 2829

f[i][j] 表示到j为止,前面断了i条路的最小值;dp方程:f [i][j]= min {  f[i-1][k] + cost( k+1 , j )  }  ( i 这是n^3的dp,可以用斜率优化为n^2;    主要是求出 cost( k+1 , j )的表达式。  求出表达式后就可以设出x和y以及斜率K;    判断一下x或者y是否单调,以及k是否单调。 然后就基本上是套模板了。

2012-09-03 13:10:25 1002

原创 hdu 2993

这个应该就是斜率优化了。(由于用到单调队列,好像也有叫单调队列优化的)题目的意思很简单,给出N个正整数,求最大的,长度大于K的某一段的平均值。设部分和数组为S,则容易得到方程 (S[j]-S[i-1])/(j-i+1),这可以看做(i,S[i])和(j,S[j])的斜率,那么问题转化为求n个点中水平距离至少为k的最大斜率。#include#define LL long longty

2012-08-30 22:25:54 1034

原创 hdu 4362

单调队列优化dp,主要是去除绝对值时,分为两种情况。排完序后,利用单调性可以减少复杂度。具体看代码。#include#include#includeusing namespace std;typedef struct{ int x,val;}Node;Node L[1010],R[1010]; Node Ball[51][1010];int f[51][1010];in

2012-08-30 13:01:23 553

原创 poj 2823 (单调队列)

原来这个是单调队列,第一次写,纪念一下。#includetypedef struct{ int key,tag;}Node;Node node[1000010]; int a[1000010];int mn[1000010],mx[1000010];int main(){ int n,k,i,j,head,tail,h,idx; scanf("%

2012-08-29 09:25:12 660

原创 斜率优化DP

引用一片经典的文章:http://blog.sina.com.cn/s/blog_508dd1e60100tvk0.html 最近发现HDU上的题目ms比POJ上的好些似的, 因为每次都是一道题搞一天。 也说明我真的还是很菜啊。 昨天搞了一道题,一道最短路的题目,弄了一天。其实最主要的原因是没有搞清楚Dijkstra、SPFA、Bellman_ford这几个最短路算法的复杂度。这里作个

2012-08-27 16:28:02 7542 1

原创 LCA 与 RMQ

求LCA可以用tarjan算法(见代码); 这里不详细介绍了。用到的东西主要是dfs + 并查集。 详见最下面的代码。还有一种方法是利用 倍增的思想 求。具体就是:   f[i][j] 表示i的第2^j次方个祖先是谁。 则f[i][j]= f[ f[i][j-1] ][j-1]; (j>0)        f[i][j]=father[i];(j==0)  这样可以处理出每个节点的

2012-08-26 18:40:23 1886 1

转载 树形dp 求期望 HDU4035

特此声明:转载自 http://blog.csdn.net/morgan_xww/article/details/6776947   ,觉得比较好,就转载过来,如有版权问题,我立即删掉。比赛时看题了,但是没有思路。比赛结束后这题总共通过20+,赛后看这个解题报告,由于博主说得太简洁,而我又是从来没有见过这种dp求数学期望的题,所以研究了好久都木有明白。只有搜索一下【dp求期望】

2012-08-21 14:22:24 1279

原创 神奇的植物

神奇的植物时间限制:5000 ms  |  内存限制:16384 KB描述        前不久,探险队b前往inst沙漠进行考察。他们在沙漠中发现了一种生命力十分强悍的植物。这种植物从种子到发芽只需要1天时间,而从发芽的第x天开始,一直到第y天(包括第y天),每天又都会繁殖出一粒种子,每棵植物都会在发芽的第z天时枯萎死亡。        因为探险队b以

2012-08-19 20:03:43 828

原创 2011年全国大学生程序设计邀请赛(福州)——Tiling

TilingTime Limit: 1000msMemory Limit: 32768KBThis problem will be judged on FZU. Original ID: 204064-bit integer IO format: %I64d      Java class name: MainPrev Submit Status Statistics Discuss NextFo

2012-08-19 18:09:58 2131

原创 poj2528 (线段树+离散化)

本题有个小trick,就是离散化时相邻两个数相差大于1时,经过离散化就会使得两个数差为1.而在本题中这是有区别的,因为题目中的数表示单位长度,不是一个点,所以要在差大于1的两个数之间插入一个数,然后再离散化。#include#include#includeusing namespace std;#define maxn 80005#define lson l,m,rt<<1#defi

2012-08-19 10:04:42 555

原创 线段树模板 (poj 3468)延迟标记

参考了胡浩大牛的代码风格。#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn = 100010;long long add[maxn*4+1]; long long sum[maxn*4+1];void pushup(int rt){ sum[rt] = sum[rt<<1] + sum

2012-08-18 11:20:22 1217

原创 HDU 4340 树形DP

2012 Multi-University Training Contest 5Capturing a countryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionAnt and Bob two army want to cap

2012-08-18 02:39:01 752

原创 bnuoj 17184 代数 (带权并查集 )

代数Case Time Limit: 1000msMemory Limit: 65536KB 现有N个未知数A[1],A[2],…A[N],以及M个方程,每个方程都是形如A[s]+A[s+1]+A[s+2]+…A[t-1]+A[t]=c。现在求解这个方程组。Input 输入的第一行为两个整数N和

2012-08-17 21:29:58 1084

原创 hash小模板

#define MAX 1000010struct{ int next,value,num;}edge[MAX]; int e=0; int num=0;int head[MAX]; int hash(int x){ int h = x % MAX; for(int i = head[h]; i != -1; i = edge[i].next) {

2012-08-16 10:27:21 414

原创 图论常见模型——强连通分量

强连通分量【本文转自 http://wenku.baidu.com/view/d96ebeceda38376baf1fae14.html 的PPT,需要原始文档的请自行下载~ 】算法:复杂度均为O(V+E)—— Kosaraju (两次dfs)—— Tarjan / Gabow (一次dfs)例题:PopularCows (USACO Fall 03

2012-08-15 23:18:18 1471

原创 poj 1182 (带权并查集)

Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两

2012-08-15 22:52:05 7952 3

原创 最小割 模型

例题:有n个可能的中转站,建造它需要花费P[i],有m个用户群。对于第i个用户群,当A[i]和B[i]两个中转站都建起来后,他们能提供C[i]的收入,问能得到的最大获利。n到5000,m到50000。构图:->节点:— 源点s和汇点t— 每个中转站一个节点— 每个用户群一个节点->边— s到每个中转站连一条有向边,容量为P[i]—

2012-08-15 21:51:25 895

转载 并查集

并查集是一种优秀的数据结构,能够支持快速的查找某元素所在的集合以及合并操作。最常见的并查集的实现方式是森林,通过记录所有结点或者部分结点(下面会看到)的父节点来记录森林。并查集的详细实现方式可以参考CLRS第二十一章。    信息学竞赛中基本的并查集题目比较少,大多要对并查集进行一些拓展,多记录一些信息以完成计算。竞赛的题目有很大一部分是询问两个结点的相对信息,结点a相对结点b的信息用f(

2012-08-14 21:55:04 590

原创 codeforces 130 solitaire

第一反应是搜索,但裸搜会超时,所以考虑记忆化搜索。f[x][a][b][c]表示当前处理到第x堆,倒数第一第二第三堆的原来序号(也就是覆盖后的序号)为a,b,c;  这里的a和x是一样的吗?不是的,只能说a现在的位置在第x个位置。 f[x][a][b][c]= {  f[x-1][b][c][a]  ||  f[x-1][a][c][x-3]  } 分别对应放在n-3的位置和n-1的位置的两种

2012-08-13 19:12:53 495

原创 三分法求极值

三分求解凹凸函数的极值问题。Party All the TimeTime Limit: 2000msMemory Limit: 32768KBIn the Dark forest, there is a Fairy kingdom where all the spirits will go together and Cel

2012-08-13 09:42:17 1236

转载 树形结构转线性结构的方法

在图论中经常遇到一些很常见的问题,比如一个非常简单的例子,给你一棵树,每一个点都有一个权值,现在动态更新一个点的权值,叫你查询一个点对路径上所有点权的和,这种问题和图论的Tree  Problem非常类似,我们可以利用树形结构转线性结构的方法来处理,我们考虑随便取一个点,比如说1,作为根,这样我们就可以得到一个DFS序列,注意我们维护一个长度为2*N的DFS序列,每次访问开始的时候,向序列中加入一

2012-08-12 22:26:37 2437

原创 spoj 3267

离线+树状数组   给出N (1 区间 [i, j] 内有多少个不同的数。Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) (1 ≤ i ≤ j ≤ n). For each d-query (i, j), you have to ret

2012-08-12 22:09:47 698

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除