自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ihe 1110310415 linyiming QQ:545931195

珍惜有限的ACM生涯。

  • 博客(186)
  • 资源 (1)
  • 收藏
  • 关注

原创 多校 4686 Arc of Dream hdu 矩阵解

构造矩阵如下:Ai*bi AX*BX AX*BY AY*BX AY*BY 0 a(i-1)*b(i-1)Ai 0 AX 0 AY 0 a(i-1)Bi

2013-08-20 18:09:31 1210 1

原创 最远曼哈顿距离小结 poj 2926 Requirements&hdu 4666 Hyperspace

首先对于两点(x1,y1),(x2,y2)二维的曼哈顿距离为|x1-x2|+|y1-y2|将绝对值去掉,再将同一点的坐标归于一处可得四种情况:1.x1-x2+y1-y2->(x1+y1)-(x2+y2)2.x2-x1+y1-y2->(-x1+y1)-(-x2+y2)3.x1-x2+y2-y1->(x1-y1)-(x2-y2)4.x2-x1+y2-y1->(-x1-y1)-(-x2-y2)

2013-08-14 11:31:49 1673

原创 uva Fire!

/*有可能存在墙壁将大火全都围住,火蔓延不到的区域*/#include #include #include #include using namespace std;const int maxn=1005;char map[maxn][maxn];bool vis[maxn][maxn];int step[maxn][maxn];struct point{ int x

2013-05-28 15:12:18 942

原创 uva 1423 Guess

/* 利用前缀和的思想进行转化,每个符号可以得出一个不等关系,利用前缀和将其转化为二元关系,然后一个二元组为一条有向边,进行拓扑排序,按拓扑的顺序进行赋值。*/#include #include #include #include #include using namespace std;bool map[11][11];int in[11],ans[11];bool vi

2013-05-18 22:45:36 1364 1

原创 Going in Cycle!! uva

/* 求平均权值最小的回路。这里有有个转化。W1+W2+...+Wk二分回路的平均权值mid,将上式转化为(W1-mid)+(W2-mid)+.......+(Wk-mid)即用spfa来判断是否存在负权回路,注意是负权的回路。不存在的情况为当mid=max(Wi)+1时依然不存在负权回路,则无解。因为此时mid为可能取到的最大值,此时都不能有负权回路的话,当mid取更小的值时

2013-05-18 10:50:09 830

原创 LRJ白书图论 11324 - The Largest Clique uva

/* 题意:给一张有向图,求这样的一个点集,使得集合中的点u,v,u->v,or v->u,or,uv。 对图缩点,构造一张DAG。在DAG上作dp最长路。 点权为每个强连通分量重节点的个数。*/#include #include #include #include using namespace std;const int maxn=1010;const int

2013-05-04 08:37:43 1294

原创 hoj 2555 三维最大子段和

枚举底面的小矩形。#include #include int sum[33][51][51],f[51],a[33][51][51];int main(){ int h,n,m,t,max,ans; while(scanf("%d%d%d",&h,&n,&m)==3) { memset(sum,0,sizeof(sum)); for

2013-04-07 11:06:50 969

原创 hoj 2558 二维最大子段和

#include #include int a[101][101],sum[101][101];int f[101];int main(){ int n,t,ans,max; while(scanf("%d",&n)==1) { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++)

2013-04-07 11:06:03 1273

原创 hoj 1760 The jackpot一维

#include #include int f[10001];int main(){ int n,a,ans; while(scanf("%d",&n)==1&&n) { memset(f,0,sizeof(f)); ans=-1; for(int i=0;i<n;i++) {

2013-04-07 11:04:50 1046

原创 动态规划小结(1)最大子段和

1.对于一维问题,求解一个序列中的连续子段的最大和。状态:一维数组dp[i]:以i结尾的最大子段和,并非前i项的最大子段和,二者有区别。转移:if dp[i]>0 dp[i+1]=dp[i]+a[i] else dp[i+1]=dp[i] ans=max(dp[k];k=1,2,....n),空间上可以用滚动数组的原理优化,空间复杂

2013-04-07 11:00:26 1282

原创 Fibonacci hdu 1568

#include #include #include #include #define c (sqrt(5.0)+1.0)/2.0using namespace std;int main(){ int f[40]; f[0]=0; f[1]=1; for(int i=2; i<=20; i++) f[i]=f[i-1]+f[i-2];

2013-02-27 11:03:14 592

原创 How many ways?? hdu 2157

#include #include #include using namespace std;int tmp[21][21],ans[21][21],b[21][21];int N;void mul(int a[][21],int b[][21]){ memset(tmp,0,sizeof(tmp)); for(int i=1; i<=N; i++)

2013-02-27 11:01:24 891

原创 A Simple Math Problem hdu 1757

#include #include #include using namespace std;typedef long long LL;LL tmp[11][11],a[11][11],b[11][11];int mod;void mul(LL a[][11],LL b[][11]){ for(int i=0; i<10; i++) for(int j=0;

2013-02-27 11:00:29 892

原创 Weights hoj 2635

#include #include #define mod 9999997long long tmp[3][3],ans[3][3],a[3][3];void mul(long long a[][3],long long b[][3]){ for(int i=1; i<=2; i++) for(int j=1; j<=2; j++) {

2013-02-27 10:58:11 612

原创 hoj 2060 Fibonacci Problem Again

#include #include #include #define mod 1000000000using namespace std;typedef long long LL;LL a[4][4],tmp[4][4],ans[4][4];void mul(LL a[][4],LL b[][4]){ for(int i=1; i<=4; i++) for(

2013-02-27 10:57:10 715

原创 Fibonacci Numbers hoj 求斐波那契前四位和后四位

#include #include #include #include #define c (sqrt(5.0)+1.0)/2.0#define mod 10000using namespace std;typedef long long LL;LL tmp[3][3],a[3][3],ans[3][3];void mul(LL a[][3],LL b[][3]){ f

2013-02-24 13:05:20 833

原创 hoj 2255 Not Fibonacci

#include #include #include #define mod 10000000using namespace std;typedef long long LL;LL a[4][4],tmp[4][4],ans[4][4];void mul(LL a[][4],LL b[][4]){ for(int i=1; i<=3; i++) for(in

2013-02-24 13:03:29 690

原创 HOJ 1016 Joseph's problem I&&HOJ 2920 Escape

这题有一个很好的数学类解法。推导出母函数来直接求解,很高效。这边介绍一种更为普遍的模拟方法,用树状数组来模拟约瑟夫问题。本题先预处理出要求的素数。然后每次新形成的环里下一个目标的间隔就是相应的素数。在这里用树状数组来处理元素动态删除和在线统计间隔以快速确定下一个元素下标,这里用二分来逼近。动态删除即将单点更新为-1,统计直接取和。#include #include #i

2013-02-24 12:37:01 1099

原创 POJ 2985 The k-th Largest Group

数组a[x]的含义是个数为x的组有多少个。利用树状数组更新a,合并,则原先个数所在的集合-1.新形成的几何集合.#include #include const int maxn=200010;int c[maxn+1],f[maxn+1],a[maxn+1];inline int lowbit(int x){ return x&(-x);}void updat

2013-02-24 12:34:37 848

原创 HOJ_2430 Counting the algorithms

#include #include const int maxn=2*100001;int c[maxn],a[maxn];bool judge[100001];int f[100001];inline int lowbit(int x){ return x&(-x);}void update(int x,int p){ for(int i=x; i<maxn;

2013-02-21 12:24:44 783

原创 HOJ 2686 Magic-Box

#include #include const int maxn=202;int c[maxn][maxn][maxn];inline int lowbit(int x){ return x&(-x);}void update(int x,int y,int z,int p){ for(int i=x; i<maxn; i+=lowbit(i)) f

2013-02-21 12:23:33 541

原创 POJ 2155 Matrix

#include #include const int maxn=1001;int c[maxn][maxn];inline int lowbit(int x){ return x&(-x);}int sum(int x,int y){ int ans=0; for(int i=x; i>0; i-=lowbit(i)) for(int j=

2013-02-21 12:22:45 662

原创 POJ 1195 Mobile phones

#include #include const int maxn=1050;int c[maxn][maxn];inline int lowbit(int x){ return x&(-x);}void update(int x,int y,int p){ for(int i=x; i<maxn; i+=lowbit(i)) for(int j=y;

2013-02-21 12:21:52 658

原创 POJ 2029 Get Many Persimmon Trees

#include #include const int maxn=101;int c[maxn][maxn];inline int lowbit(int x){ return x&(-x);}void update(int x,int y){ for(int i=x; i<=maxn; i+=lowbit(i)) for(int j=y; j<=ma

2013-02-21 12:20:23 601

原创 POJ 2481 Cows

#include #include #include using namespace std;const int maxn=100005;int c[maxn+1];struct point{ int s,e,ans,id;} p[maxn+1];inline int lowbit(int x){ return x&(-x);}void update(int

2013-02-15 12:06:29 1022 1

原创 POJ 3067 Japan

#include #include #include using namespace std;const int maxn=1005;long long c[maxn+1];struct point{ int x,y;} p[1000005];inline int lowbit(int x){ return x&(-x);}void update(int x

2013-02-15 12:05:41 697

原创 HOJ 2678 Stars

#include #include #include #include using namespace std;const int maxn=1001;struct point{ int x,y,z;} p[15001];int c[maxn][maxn];int s[15001];int cmp(point a,point b){ if(a.z!=b.z)

2013-02-15 12:04:46 797

原创 POJ Stars 2352

#include #include int c[32001];int s[15001];inline int lowbit(int x){ return x&(-x);}void update(int p,int d){ for(int i=p; i<=32001; i+=lowbit(i)) c[i]+=d;}int sum(int x){

2013-02-15 12:03:36 749

原创 Ultra-QuickSort

#include #include #include #include using namespace std;const int maxn=500001;int c[maxn],n,m;struct NUM{ int id,num;} a[maxn];int cmp1(NUM a,NUM b){ return a.num<b.num;}int cmp2(

2013-02-15 12:00:46 950

原创 树状数组小结(1)

树状数组其统计量的变化,可以动态删除区间,更新区间,更新节点,区间统计,单点求值。大部分题的代码在博客中有。利用对和的二分,可以快速的求解第K大。主要注重问题的转化和应用。1.hoj 2275 Number sequence 利用树状数组来统计个数,左边比他小的元素的个数,顺序将元素的个数更新为1,统计右边比他大的元素个数,可以逆序更新,取和求统计个数是动态过程。2.Ultra-Quic

2013-02-14 19:18:38 1287

原创 Go hdu 4158 hoj 简单搜索

/*搜索中状态加入队列时就要立即更新标志,不能出队的时候更新,否则中间有部分状态会重复搜索造成错误。*/#include #include #include #include using namespace std;int map[21][21];bool vis[21][21];int dx[4]= {1,-1,0,0};int dy[4]= {0,0,-1,1};in

2013-01-23 21:36:33 944

原创 简单计算求组合数 Binomial Showdown

#include int main(){ double n,k; while(scanf("%lf%lf",&n,&k)==2) { if(n==0&&k==0) break; double ans=1; if(2*k>n) k=n-k;//注意优化 while(k>=1)//分子是n*n-1*...*n-

2013-01-23 19:16:12 1048

原创 Count Color 线段树成段更新 hoj &poj

/*注意在查询的时候要将标记下方。*/#include #include #define maxn 100001int c[maxn<<2];bool color[31];int lazy[maxn<<2];void swap(int &a,int &b){ int temp; temp=a; a=b; b=temp;}void build(in

2013-01-22 21:21:07 659

原创 线段树+DP 求区间连续最大子段和 hoj Candy

/* f为从左端开始的最大子段和,b为从右端开始的最大子段和。 pushup中的为最大字段和的状态转移方程。*/#include #include #define maxn 100001#include using namespace std;int m[maxn<<2],f[maxn<<2],b[maxn<<2],sum[maxn<<2];void pushup(int rt)

2013-01-22 21:17:50 2429

原创 多重背包的二进制优化 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活

/*今天刚看了背包九讲的多重背包优化,经典啊!将n[i]件等值的物品用二进制转化为log(n)件物品,这个是个很大的优化,具体的处理是对每一件物品的费用和价值也都乘上相应的二进制系数。*/#include #include int p[101],c[101],h[101];int dp[101];int n;int max(int a,int b){ if(a>b) re

2012-11-28 23:49:22 1430

原创 Catenyms poj hoj 欧拉回路输出路径

#include #include #include #include using namespace std;const int maxn=1001;struct edge{ int to,next;} e[10005];struct word{ char s[25];} word[maxn];bool vis[maxn],used[27];int he

2012-10-10 22:39:00 1710

原创 一类计算问题小结poj&hoj Set Definition ,Humble Numbers ,Ugly Numbers 因子构造法

/*这类问题都是给一些只能由某些特定因子乘积组成的数,然后求第n个数的大小。做法就是每次用所给的条件来构造因子,预处理出前N项的值,复杂度O(N),查询复杂度O(1).*/Set Definition.code#include #include using namespace std;int a[10000000];int main(){ a[1]=1; int n

2012-10-04 16:09:18 994

原创 487-3279 hoj 模拟AC

/*之前写的在poj1002上AC了,但是在HOJ上过不了,现在又写了一遍,在HOJ 上过了。一个是字符串排序的写法,可以当模板用。其余都是细节问题。*/#include #include #include #include using namespace std;const int maxn=100001;int cmp(const void* _a,const void* _

2012-10-04 10:56:19 1111

原创 Alien Security hoj poj 最短路应用好题

/*题意是求一个离终点最近的点使得去掉该点之后起点到终点不连通。*//*对于距离最近,可以终点为源点作spfa,预处理出从终点到其余各点的最短路径,这里有些细节要注意,一个是松弛时应用map[i][x]的松弛的条件,而非map[x][i],因为题意是有向图且路径方向是从起点到终点,然后直接相邻的两个点边权处理为1.最后是用深搜判断两点是否连通。*/#include #include

2012-10-04 08:32:56 781

原创 Guardian of Decency hoj poj 二分图匹配 不错的题

/*这个题的原意是求不能成为夫妇的人的最大数量。但是这个只需要满足四个条件中的一个就可以连一条边,这样匹配后产生的课匹配的边数量过多,就超时了。可以反过来想,求不满足题意,即能成为夫妇的点数,再用总数n-此时的最大匹配数m。因为是拆点建图,所以m/=2.最大二分匹配就转化成了最小覆盖。另外,对500上限的点数,用邻接矩阵是0.59s。而用vector的临接表是0.21.时间效率很客观,

2012-09-29 23:22:58 843

欧拉回路输出路径

Catenyms poj hoj 欧拉回路输出路径

2012-11-18

空空如也

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

TA关注的人

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