自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

终究我要华丽逆袭

弱菜一枚,剑指大牛

  • 博客(87)
  • 收藏
  • 关注

转载 ACM数学题目

转:http://blog.sina.com.cn/s/blog_6635898a0100magq.html1.burnside定理,polya计数法    这个大家可以看brudildi的《组合数学》,那本书的这一章写的很详细也很容易理解。最好能完全看懂了,理解了再去做题,不要只记个公式。    *简单题:(直接用套公式就可以了)    pku2409 Let it Bead

2012-12-04 20:25:18 1765

转载 《算法艺术与信息学竞赛》题目-提交方式对照表

id titlehow2submitsourcepage1 盒子里的气球  82 图书馆ural1188 93 钓鱼uva757pas134 照亮的山景  135 镜子盒  156 折纸痕uva1

2012-09-19 14:05:26 4231

转载 搜索题目推荐及解题报告

搜索题目推荐及解题报告(8.28更新)2008-06-28 14:31以前的帖子要么太分散,要么太凌乱,故现在开始,对每一个分类做一个长期更新的汇总贴。格式说明:题目名后面列出个人此题的大致难度(对菜鸟而言)POJ 1069 -The Bermuda Triangle(难)http://acm.pku.edu.cn/JudgeOnline/problem

2012-08-26 19:49:19 504

转载 网络流专辑 转自notonlysuccess

网络流是ACM里非常重要的一大块,变形非常灵活,这些天仅仅只是做了一点点题目,几个经典模型,冰山一角而已.图论可不是练两天就能掌握的,所以也就放弃了一口吃成胖子的想法,打一场持久战,有空的时候更新几道并在下边写点解题报告,所以暂时不可能成为一篇非常完整的整理所以我在下文加了几个相关链接,都是大牛们的整理,并且也有这对题目的相关分析…网络流的题如果直接看分析就浪费了最重要的思考过程,

2012-08-26 16:56:57 1071

转载 字符串练习

poj pku字符串题目推荐及解题报告POJ 1002 - 487-3279(基础)http://acm.pku.edu.cn/JudgeOnline/problem?id=1002题意:略解法:二叉查找数,map,快排...POJ 1200 - Crazy Search(基础)http://acm.pku.edu.cn/JudgeOnline/

2012-08-23 10:06:23 957

原创 POJ 2429

开始闲的无聊特判gcd=1的情况 特判错了 真是呵呵诶、我的做法 比较挫、、首先肯定对gcd 还有 lcm进行质因数Poll分解。我是用map记录每个因子和出现次数。然后合并两个map所有质数,就是用merge、然后DFS下、、去得到的value里面 使得 value^<=gcd *lcm的最大value赋值给a即可。。b= gcd * lcm /a;#include #include

2012-12-09 16:24:12 2495

原创 POJ 1811

应该是两个算法的入门题、、、认真看了一上午算法导论,做掉了、、RE好多次、、原来是编译器问题 换了C++ 就AC了、、、乘法要用二进制相乘 否则会爆long long#include #include #include typedef long long LL;int T;LL n, s;LL factor[110000];LL mods(LL x, LL y, LL n

2012-12-09 14:42:04 1332

原创 ZOJ 2562

想了半天 想不到什么正解、、随便搞下、、竟然不科学的没超时的过了、、我用个map记录、、对于从第i个素数开始 能构成不小于n的数,最大divisor有多少,并且最小这个数十多少、、然后枚举记忆化下、、、没超时 我都觉得不科学了#include #include #include #include #include using namespace std;typedef lo

2012-12-08 14:11:23 779

原创 HDU 3440

比较好的一道差分约束的题目。差分约束里面,我觉得最经典的两句话就是 按最短路求的值达到可能的最大,按最长路求的值达到可能的最小。建图,比较简单,每个点dis[i+1]>=dis[i]+1 所以i+1->i 连条-1的边。其次 排序 高度数组,保存对应的id,然后遍历,相邻两个,连条d的边。超时了几次,原因是,连长度为d的边,对于下标小的点,往下标大的点连条边就行,不需要反过来再连。

2012-12-05 14:18:43 1088

原创 HDU 2433+删边最短路

比较好的一道最短路题目,大家多想想吧,思路还是枚举删边,只不过优化下,先预处理出最短路,然后对每条边,枚举每个点,看这条边是否会影响这个点的最短路之和,会的话才再做一次最短路,由于,最短路所生成树,最多n-1条,所以每个点,最多做n-1次,所以复杂度(n-1)*n*m(m是BFS复杂度)

2012-12-03 23:35:18 2233

原创 hdu 3873+DIJ的思想

开始做的时候,模模糊糊知道点思想,但老是wa,我开始是,当更新到一个点的时候 如果通过这个点使得某些点没约束了,就更新dis=max(dis,l) l是这个点的最短路(相对起点)但老是wa,后来想了下,要用一个数组记录需要到这个点,需要到达所有点时间的最大值,每次循环,用这个更新下dis才比较科学,改了下 AC了#include#include#include#include#incl

2012-12-02 21:28:49 1150

原创 hdu+1595+删边最长最短路

开始我直接枚举删边 就超时,后来想了下,只要枚举最短路径上的边删除就行了。。。改了下 就AC了#include#include#include#include#includeusing namespace std;const int inf=999999999;int n,m,cnt,a,b,l,dis[1010],in[1010],head[1010],mp[1010][1010]

2012-12-02 14:24:57 1218

原创 ZOJ 1013

总觉得不科学、、、写了5个循环,,总觉得危险,,,竟然只跑了550ms。。。。亮瞎,果然各种break导致下来复杂度其实没那么高做法、、dp[i][j][k]记录 前i个车,装了j个1号,k个2号,最多装几个3号、、、然后就随便搞了、、、开始还以为会超时  真是亮瞎。。#include#include#includeusing namespace std;int n,w[3],s[3]

2012-12-01 13:59:36 1007

原创 poj 2888

相比于直接polya,多了相邻元素限制,也就是难度在于怎么求 对应置换不变的染色种类,我们考虑用个矩阵来村颜色之间的关系,如果是1就是可相邻,对于不可相邻的,赋值为1,这样对于长度为k的环,种类数就是,根据离散知识:矩阵k次幂,对角线元素之和(开始以为是k-1次幂所有元素之和,但这是个环,要绕回来的,所以是k次幂对角线元素之和)然后就好搞了。搓比代码:#include#include#in

2012-11-28 13:23:19 1399

原创 hdu 2865 基础polya问题

#include#includeusing namespace std;const int MOD = 1000000007;typedef long long LL;LL n, m;int prime[37000],is[37000];void getprime(){ int cnt=0; for(int i=2;i<37000;i++){ if(!is[i]){ p

2012-11-28 09:56:24 768

原创 ZOJ2477

IDA搜索。。。。想法不难,难在,旋转的时候每个点对应哪个点要改变、、、wa了5次,写的泪奔了。。。change函数是相邻4个面的变化,rotate是自转#include#include#includechar mp[6][3][3],s[2];int T,ansx[10],ansy[10];int judge(char mp[6][3][3]){ for(int i=0;i<6;i

2012-11-25 23:09:56 922

原创 ZOJ 2112

我擦、、真难,看了mj的代码,才会写、、WA了无数,终于AC,删除写错几次,线段树写错几次,果然数据结构不多写就悲剧。。。做法是线段树里面套个SBT,这样替换操作,相当于每个包含这点的线段的Sbt执行一次insert和del,然后对于询问,二分答案,看>于它的是否超过k个。取下界即可。#include#includeint T,n,m,a,b,c,tot,p[50010];char

2012-11-24 21:01:55 800

原创 CF div #151 E题

题目:点击打开链接大意是给出一个树,每个节点有个名字,求一个节点,所有k-child,有多少个不同name,首先记录每个层次的节点,但怎么知道某个节点是不是对应的k-child,这里应该dfs预处理的时候记录,每个节点,进入 出来的时间,然后二分下界,就可以得到自身k-child的范围,set搞一下就行了。。跑了890ms,估计是cin cout太慢了吧#include#include#i

2012-11-23 12:34:01 579

原创 POJ3710

想了好久终于搞定了,无向图删边游戏,但是会有环,对于环,很明显,如果是奇数环,所有后继SG值都会是偶数,所以这个状态SG为1,把环缩成一个点+1条边,如果是偶数环,那么后继SG非0,此环SG=1,就将环缩为1个点,对于环,利用tarjan+栈预处理下,就行了#include#include#includeusing namespace std;vectorvt[110];int n,m,

2012-11-22 12:13:31 686

原创 POJ2286+IDA*算法

IDA*算法搞下 就行,hash不了,只需要剪枝,前一移动顺序不是现在移动的逆过程就ok/*IDA*算法*/#include#include#include#includeusing namespace std;int a[25],depth;bool ok(int * p){ int k=p[7]; return (k==p[8])&&(k==p[9])&&(k==p[12]

2012-11-14 10:28:55 1624

原创 HDU 1430+BFS

这道题一看,暴力bfs去搞,超时,康拓hash下还是超时,结果看大牛博客,才知道。。对于一个状态到另一个状态都可以转化为12345678到另一个状态,中间只需置换下即可,这样的话,只要一次bfs预处理出所有情况就可以了。。不需要每个case都搜一遍。。。#include#include#include#include#include#includeusing namespace std

2012-11-13 13:36:25 1259

原创 poj 2449 k短路

一道给定图,求S->T的k短路,想了半天还是没想法,看了别人题解才懂得,先求反向图源点为t的最短路,我是用dij的优先队列写的。然后用对于正向图,利用ASTAR算法,利用优先队列,估价函数为f[i]=w+d[i],意思就是,我走了一个距离w,还有最短d[i]距离再到k,满足d[i]k短路。code:#include#include#include#includeusing name

2012-11-09 20:41:16 961

原创 CF #148 DIV2 E

树形DP的不错的题目 枚举第一个点,以此为根dfs,然后对于另一个点v不再路径u-v上的边 全要调成指向树叶,路径上的边,相当于01序列化为11....00#include#include#includeusing namespace std;#define N 3100int dp[N][2],n,sum;struct node{ int f,y;};vectorvt[N

2012-11-07 00:25:23 600

原创 hdu4390 容斥原理

突然发现以前没坐过数学题,,菜菜菜啊、、、看了下题目,知道用容斥原理,但好多什么分解质因数,什么的都不会,于是搜了下别人博客,然后才会的、、现在开始做点数学题。。up~~比较简单的题目:分解质因数 对于每个因子的指数p分给n个数,方案数就是多重组和c(n+p-1,p)但是ai>1所以用个容斥原理就ok#include#include#include#includecon

2012-11-05 00:24:19 901

原创 后缀数组+RMQpoj3693

大概的思想就是对于一个重复长度为l的串,对于下表0,l,2*l,3*l。。。存在相邻两个数使得r[i]==r[j],这样对于i,j匹配得到的最长公共前缀得出重复次数z/l+1,但如果不整除的话,i和j要前移l-z%l,原因很明显,画个图就ok了,然后对于字典序,只需要外层枚举sa数组的下表,内层枚举所有使得有maxnumber的重复长度L,看是否满足,满足就输出然后break即可#incl

2012-11-04 13:36:02 2082

原创 poj 1743及spoj694

最近在看后缀数组,刚开始看完后,自己写个后缀数组的倍增算法都累死了(ps:lz太菜了),慢慢写了几道之后好多了。poj 1743:题目求最长不想交子字符串,方法是二分长度k求上限,然后根据k把height数组分组,每组字符串间的公共长度大于=k,然后对于每个组,如果sa[i]的最大值和最小值相差大于k,那么就存在两个子字符串不相交,这个k就满足题意。#include#incl

2012-11-03 13:50:33 1129

原创 poj1734 最小环

这道题目是floyd的经典,floyd的核心思想就是动态规划从k=0->n来松弛i->j的路径,这样我们可以这样思考这个环,里面肯定有最大的下标,设为k,与之相邻的是i和j,然后i->j的最短路肯定在用k松弛前已经更新完,换句话说就是我们floyd时候先找环再松弛,因为floyd的外层到k时,i->j的最短路上肯定没有k所以这个环不会存在相同的点,代码如下:#include#includ

2012-11-02 22:44:49 1419

原创 一点收获

最近做了一道题目,CF 147div2的C题,纯水题目,自己程序跑了470ms,别人都跑了67ms,为什么呢。开始以为自己没有二分,但原因竟然在于求质素。比如求2--n的所有质数,自己就直接枚举然后判断,但是,跑的很慢,最后看到别人的一种方法,觉得不错,所以自己没有用二分也跑了47ms估计这个方法比较二,大牛勿喷。 for(int i=2;i<=b;i++)p[i]=1; for(int

2012-10-29 20:46:28 438

原创 POJ1184

荒废了好久的时间啊,刷了一会博弈后就天天酱油好久了,昨天继续ACM之旅,刷到POJ1184,觉得好难啊,看了别人的思路,才会写的、、直接上代码,(无力了).BFS#include#include#include #include #include#define N 10000using namespace std;int sign[10][6]={ 1,0,0,0,0,

2012-10-17 14:49:09 1212

原创 ZOJ1039

字典树+搜索时用dfs#include#include#include#includeusing namespace std;int T,n,m;char s[110];vectorvt[9];struct trie{ int cnt; trie * nxt[26];};trie * init(int num){ trie * p=new trie; p->cnt=

2012-09-24 21:34:59 554

原创 小问题

今天发现了一个问题,比如vectorvt[100];对100个容器进行push操作,然后求vt[i].size()的最大值。开始我是int maxn=-1;for(int i=0;i<100;i++)if(maxn<vt[i].size())maxn=vt[i].size();printf("%d\n",maxn);这就有问题了,不管咋样答案都是-1,这是为什么

2012-09-23 21:07:31 429

原创 ZOJ3511

暴力竟然过了、、利用vector记录每个多边形顶点,明天看别的解法,mark下(据说线段树)#include#includeusing namespace std;vectorvt[10005];int c[10005];int n,m;int main(){ while(scanf("%d%d",&n,&m)!=EOF) {

2012-09-23 02:29:14 517

原创 POJ2155 二维线段树

二维线段树,不像hdu1823用4分搞定,这题4分会超时,用树套树即可#include#includebool seg[4010][4010];int n,m,T,ans;void udy(int i,int l,int r,int j,int y1,int y2){ if(l==y1&&r==y2) { seg[i][j]^=1; return; } int mid=(

2012-09-19 20:12:17 1388

原创 hdu1823 二维线段树

第一次写二维线段树,参考了别人代码,主要思路是类似于一维线段树,只不过线段二分思想变成了矩阵四分。#include#includeint seg[8000*800],n;int max(int a,int b){ return a>b?a:b;}void ud(int al,int ar,int hl,int hr,int a,int h,int d,int i){

2012-09-19 18:23:14 840 1

原创 HDU 1823 二维线段树

第一次写二维线段树,参考了别人代码,主要思路是类似于一维线段树,只不过线段二分思想变成了矩阵四分。#include#includeint seg[8000*800],n;int max(int a,int b){ return a>b?a:b;}void ud(int al,int ar,int hl,int hr,int a,int h,int d,int i){

2012-09-19 18:21:27 627

原创 hdu1251

字典树入门~#include#includetypedef struct node{ int cnt; struct node *next[26];} AC;AC * create(){ AC *p=(AC *)malloc(sizeof(AC)); p->cnt=1; for(int i=0;i<=25;i++) p->next[i]=NULL; return p;

2012-09-19 16:40:25 860

原创 ZOJ1610+线段树

线段树成段覆盖:#include#include#define MAXN 10000int seg[4*MAXN],n,cnt[MAXN],col[MAXN];void down(int x){ if(seg[x]!=-1) { seg[2*x]=seg[2*x+1]=seg[x]; seg[x]=-1; }}void ud(int le,int re,int a,in

2012-09-17 23:10:02 1290

原创 2.6-精确表达浮点数

看到了自己不会的(ps:可能很水的东西)对于一个小数,如何把它变为分数形式呢?只看无限循环的,有限easy。首先把这个数分为整数+0-1的小数,对于0-1的小数0.a1a2a3..an(b1b2b3..bn)   b1..bn是循环节照样可以把不循环的部分去掉记X=0.a1a2...an(b1b2...bn)Y=0.(b1b2...bn)10^n*X=a1a2.

2012-09-17 12:34:43 717 2

原创 ZOJ3381

DP+线段树,dp[i]记录从i开始的最大收益,dp[i]=s[i]+max(dp[x]|i+x[i]利用线段树维护个最大值就行了#include#define MAXN 50010#define max(a,b) ((a)>(b))?(a):(b)int n,s[MAXN],x[MAXN],y[MAXN];int seg[4*MAXN];int dp[MAXN];vo

2012-09-16 16:30:51 528

原创 poj3264

纯RMQ问题#include#includeusing namespace std;#define MAXN 50010int n,q;int p[MAXN];int dpmin[MAXN][20],dpmax[MAXN][20],pw[20];int log(int n){ int cnt=0; while(n) { cnt++; n>>=1; } return

2012-09-16 14:58:25 1251 1

空空如也

空空如也

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

TA关注的人

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