08 2012 档案

摘要:题目链接静静的想一想,就OK了,数据量很小。 1 #include <stdio.h> 2 #include <string.h> 3 int dp[31][31]; 4 int main() 5 { 6 int n,m,i,j; 7 scanf("%d%d",&n,&m); 8 dp[1][2] = 1;dp[1][n] = 1; 9 for(i = 2;i <= m;i ++)10 {11 for(j = 2;j <= n-1;j ++)12 {13 dp[i][j] = dp[i-1][j-1... 阅读全文
posted @ 2012-08-31 15:11 Naix_x 阅读(163) 评论(0) 推荐(0)
摘要:暑假集训终于结束了,2个月有很多的收获,学长们基本上把大体的算法都给通了一遍,当然只是粗略的讲了讲,不过对于我来说很多还是第一次接触。。。有些东西还是有人讲讲理解的比较好,暑假的学习效率也比较高,学到东西可以比较快的理解。 以前自学的效率确实有点低,暑假前懂点DP,懂点DFS,懂点最短路,懂点最小生成树,主要还是6月份,学的东西比较多,感觉大一下的前段时间都浪费了,直到省赛被虐了,才开始学各种算法。。。最后了,也快考试了,吐槽一下大一下课真多,幸好期末考试都给混过去了,感谢老师,感谢党。。。 暑假除了二分匹配,网络流,图论有些没讲,其他基本上都涉及了,东西其实还是挺多的,不过只是... 阅读全文
posted @ 2012-08-31 15:07 Naix_x 阅读(139) 评论(0) 推荐(0)
摘要:题目链接两个月前写的一个题,怎么搞怎么RE了,算法也知道,今天比赛又做,居然1Y。。。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define eps 1e-9 5 char str[5000001]; 6 int o[301]; 7 int main() 8 { 9 int i,j,n,st,len,max,num;10 while(scanf("%d%*c",&n)!=EOF)11 {12 memset(o,0,sizeof(o)); 阅读全文
posted @ 2012-08-29 18:44 Naix_x 阅读(239) 评论(0) 推荐(0)
摘要:题目链接这个题的状态转移什么的和题意比起来,根本不算什么。。。根本看不懂啊,昨天比赛大体看懂了,以为是每一年的都要保存其实是从第一个+开始保存每一年的电话。中间改了N多的BUG,终于在知道正确的题意后,改了最后一个BUG,AC了!!!题意:一个手机的电话记录太多了要删除以前的记录,+ 是必须要留下的,这个手机没法显示年份,所以要从月份啥的推断,从第一个+ 开始保存,并且可以通过电话的时间分辨出年份。有很多细节要注意,WA了N次啊。。。所以 dp[i] 上个电话是j,则 j的年份一定和i一样,或者在i的前一年并且j的时间>=i的时间,当然如果存在 + 的电话,j一定是+电话,如果没有则取小 阅读全文
posted @ 2012-08-29 10:47 Naix_x 阅读(381) 评论(0) 推荐(0)
摘要:题目链接今天下午队内测试赛的题,据宝哥说,TC上的500,我想了N久。。。开始理解题意都很费劲,这要去做TC,还不被虐成渣了。。。想清楚就了就很简单了,还好过了。。。有点贪心,但是感觉应该是这样。每一个柱子头部或者底部,到下一个的头部或者底部策略最优,这样就A了。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 int p[1001][3]; 5 double o[1001][3]; 6 double Max(double a,double b) 7 { 8 return a 阅读全文
posted @ 2012-08-27 19:25 Naix_x 阅读(149) 评论(0) 推荐(0)
摘要:题目链接纠结啊,几天找不到个可做的题,前几天刷了几个水题,第300个也是水题,终于300了,加油!写的太搓了。。。写的很暴力,不过数据量小,水过吧。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define N 100000000 5 int main() 6 { 7 char p[300]; 8 int dp[300],sum[300]; 9 int i,j,len,t,min;10 scanf("%d%*c",&t);11 while(t 阅读全文
posted @ 2012-08-27 09:21 Naix_x 阅读(186) 评论(0) 推荐(0)
摘要:题目链接参考题解,解方程都解错。。和HDU3507 有点类似。其中还要运用换元,数学能力太弱了。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 500001 5 long long dp[N],que[N],p[N],sum[N]; 6 int m; 7 double slope(int x,int y) 8 { 9 if(sum[x] == sum[y])10 {11 if(dp[x] > dp[y])12 return -1... 阅读全文
posted @ 2012-08-26 13:40 Naix_x 阅读(261) 评论(0) 推荐(0)
摘要:题目链接纯纯的数学,以前的时候没想法。。。利用log,果然神奇。。杭电299了。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define eps 1e-9 5 int main() 6 { 7 int t; 8 __int64 n,a; 9 double k;10 scanf("%d",&t);11 while(t--)12 {13 scanf("%I64d",&n);14 k = n*log10(n);15 阅读全文
posted @ 2012-08-24 09:35 Naix_x 阅读(140) 评论(0) 推荐(0)
摘要:题目链接暴力枚举,a+b+a*b = N,(a+1)*(b+1) = N+1,10^5枚举起来吧。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define N 1000000000 6 int main() 7 { 8 int i,t,k,num; 9 __int64 n;10 scanf("%d",&t);11 while(t--)12 {13 scanf("%I64d& 阅读全文
posted @ 2012-08-23 20:50 Naix_x 阅读(139) 评论(0) 推荐(0)
摘要:题目链接一开始那个初始化错了,WA了N次啊。。。Vijos上数据太水了,POJ上本来也想水过的,这个感觉将近O(n^4)的复杂度,交上超时了,本来想优化一下预处理出前i个和的,发现好像这个复杂度,找最小的时候,没法优化。。看了DISCUSS,有人就这样水过的,把INT64啥的,小细节改改成了750ms。。。四边形不等式优化,纠结。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 1000000000 5 int p[301]; 6 int dp[31 阅读全文
posted @ 2012-08-23 20:22 Naix_x 阅读(268) 评论(0) 推荐(0)
摘要:题目链接有结论。。在有向图中,每两个点都存在一条边,如果存在环,则一定存在3元环。拓扑排序一下。 1 #include <stdio.h> 2 #include <string.h> 3 char str[2001][2001]; 4 int o1[2001],o2[2001],k[2001]; 5 int main() 6 { 7 int t,i,j,num = 0,n,z,nu; 8 scanf("%d",&t); 9 while(t--)10 {11 num ++;12 memset(k,0,sizeof(k));13 ... 阅读全文
posted @ 2012-08-23 11:49 Naix_x 阅读(169) 评论(0) 推荐(0)
摘要:题目链接这个题简单描述一下,就是求最小生成树+最小生成树中源点的最大边,感觉有点贪心,不过还是挺明显的。题意很纠结啊,本来以为只是试着提交以下,居然1Y,看来前面几个题攒人品了。。感觉像是水过的。。。刚一查,是TC上的题。。。表示TC不会玩。。这个题用prim特别好写,kur就应该麻烦了。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <math.h> 5 #define N 100000000 6 int p[101][101],o[101 阅读全文
posted @ 2012-08-22 21:05 Naix_x 阅读(270) 评论(0) 推荐(0)
摘要:题目链接递推。。先预处理出小于m的,再推起来。 1 #include <stdio.h> 2 #include <string.h> 3 __int64 p[31]; 4 int main() 5 { 6 int i,j,n,m; 7 while(scanf("%d%d",&n,&m)!=EOF) 8 { 9 if(n == 0&&m == 0)10 break;11 memset(p,0,sizeof(p));12 p[1] = 1;13 for(i = 2;i <= m;i ++)14 ... 阅读全文
posted @ 2012-08-21 20:04 Naix_x 阅读(169) 评论(0) 推荐(0)
摘要:题目链接对这个 真心不太懂,看这了这个博客,这个博客,这个博客,后有点了解原理了。斜率优化也是建立在单调队列的基础上的,以上3个博客讲的很详细。把方程写出来,推导公式才是最主要的问题。。。代码参考题解。 以后再遇到这样的问题慢慢理解吧。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 500001 5 __int64 dp[N],que[N],p[N],sum[N]; 6 int slope(int x,int y) 7 { 8 if(sum[x] == 阅读全文
posted @ 2012-08-20 19:02 Naix_x 阅读(184) 评论(0) 推荐(0)
摘要:题目链接貌似POJ挂了,交题 一直RE。。。我去别的OJ交AC了。当做模版了,查了好几遍,还以为模版敲错了呢。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 1000005 5 int p[N],que[6*N]; 6 int main() 7 { 8 int n,m,i,str,end; 9 scanf("%d%d",&n,&m);10 for(i = 1;i <= n;i ++)11 scanf(" 阅读全文
posted @ 2012-08-19 21:27 Naix_x 阅读(181) 评论(0) 推荐(0)
摘要:题目链接比赛的时侯非常暴力来了个N*M*T的算法,状态方程虽然好想,不会优化。。认真学习一下单调队列优化,看了很多博客+题解,其实原理也不难理解。这个题状态转移,从左边来的 dp[i][j] = dp[i-1][k] + dis(k,j) 先预处理出一个sum数组存每一行前i个元素的和,dp[i][j] = dp[i-1][k] + sum[i][j]-sum[i][k-1];这就可以用单调队列了,在队列首部存放dp[i-1][k]-sum[i][k-1]最大值的下标。明白了原理后,看了一份题解,想了好一会为什么队头总是最大的,问了下学长,这个队列的关键是队头,小的元素可以直接覆盖进入队列,而 阅读全文
posted @ 2012-08-19 17:47 Naix_x 阅读(234) 评论(0) 推荐(0)
摘要:怎么感觉这次有点水啊。。3个水。。不过差点悲剧,数组开小了,依旧过了。。。人品吗。。。A乱搞。数组开小,做到最后想hack,意识到自己的数组开小了,没想到居然也过了。。。写的不好WA了次,18分钟。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 1001 5 int p[N]; 6 int main() 7 { 8 int i,n,k; 9 scanf("%d%d",&n,&k);10 for(i = 1;i < 阅读全文
posted @ 2012-08-18 21:52 Naix_x 阅读(217) 评论(0) 推荐(0)
摘要:这个帖子链接:http://topic.csdn.net/t/20041217/21/3655691_2.html虽然不是很明白,我现在也纠结是考研还是工作,到真正的该去选择的时候,我觉得一定会做出选择的。PS:05年的帖子确实好久了,不过看得出逛csdn和逛天涯猫扑贴吧的人确实不一样。。。 阅读全文
posted @ 2012-08-18 21:27 Naix_x 阅读(104) 评论(0) 推荐(0)
摘要:题目链接多重背包。先按排a[i]好序,然后倒叙多重背包。#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>struct node{ int h,c,a;}bag[401];int cmp(const void *q,const void *b){ return (*(struct node *)q).a > (*(struct node *)b).a ? 1:-1;}int p[401][40001],h[401],c[401],a[401];i 阅读全文
posted @ 2012-08-18 14:25 Naix_x 阅读(138) 评论(0) 推荐(0)
摘要:题目链接无向图啊。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int o1[510401],o[510401],num; 5 struct node 6 { 7 int flag; 8 struct node *next[26]; 9 }; 10 struct node *build() 11 { 12 int i; 13 struct node *p; 14 p = (struct node *)malloc(sizeof(struct n... 阅读全文
posted @ 2012-08-18 14:21 Naix_x 阅读(180) 评论(0) 推荐(0)
摘要:题目链接其实这个题不算难。。。可是题意就没搞懂,此题为恰好m件,WA到死啊。初始化为一个很大的负数,就能解决这个问题。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 int p[101][1001]; 6 int ti[101],v[101]; 7 int main() 8 { 9 int t,i,j,n,m,l,k,max;10 scanf("%d",&t);11 while(t--)12 阅读全文
posted @ 2012-08-17 21:15 Naix_x 阅读(150) 评论(0) 推荐(0)
摘要:题目链接有点BFS的思想,不过还是感觉像是乱搞题。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 200001 5 #define M 10007 6 char str[N]; 7 int p[N]; 8 int main() 9 {10 int i,j,t,n,start,end,ans;11 scanf("%d",&t);12 while(t--)13 {14 scanf("%d%*c",& 阅读全文
posted @ 2012-08-17 19:01 Naix_x 阅读(148) 评论(0) 推荐(0)
摘要:题目链接好久没有 搞递推,这个题在DP专题,其实是赤裸裸的一维的递推,想了好一会啊。F(n)可以由第一个不放F(n-1)加第一个放第二个不放f(n-2)加。。。F(N) = F(N-1)+F(N-2)...F(N-M)删除中间输出的时候,改错了2次。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 __int64 p[51]; 5 int main() 6 { 7 int bi[7]; 8 int i,j,n,m; 9 bi[0] = 1;10 for(i = 1;i 阅读全文
posted @ 2012-08-15 20:55 Naix_x 阅读(290) 评论(0) 推荐(0)
摘要:题目链接这种黑白问题,遇到好几次了,杭电1838和这个非常类似,这个题是他的加强版,不仅要求正方形还要求矩形的最大面积。先是两个标记数组o1,o2标记颜色不同的最大长度。sq存在正方形的最大边长正方形的状态转移就是if(p[i][j] == p[i-1][j-1])sq[i][j] = getmin(sq[i-1][j-1]+1,o1[i][j],o2[i][j]);最复杂的是矩形的最大面积。矩形分两种情况,一种是横着,一种是竖着放,开4个数组分别标记长宽。最后找最大就好。写的有点繁琐。PS:刚看了一下讨论区,我晕我的程序这么搓啊,内存多+程序跑的慢。。。 1 #include <std 阅读全文
posted @ 2012-08-15 19:22 Naix_x 阅读(218) 评论(0) 推荐(0)
摘要:题目大意:n个人要分成两个队,m种敌对关系,选出两个相同人数去比赛,一个人至多有两个敌人,敌对的不能在一个队伍,求最少有个人不能上场。我竟然没发现一个人至多有两个敌人这句话。。。然后就悲剧啊!!!用并查集去判断,是否存在奇数环。。研究了好一会别人代码。。才发现了那个条件,我本来以为并查集有很神的用法或者有证明神马的呢。。这就算个规律题吧。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define N 10000000 阅读全文
posted @ 2012-08-15 17:16 Naix_x 阅读(236) 评论(0) 推荐(0)
摘要:题目链接模板。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define eps 1e-9 5 double px[101],py[101]; 6 double cross(double x1,double y1,double x2,double y2) 7 { 8 return x1*y2 - x2*y1; 9 }10 int main()11 {12 int n,i;13 double sum;14 while(scanf("%d",&n) 阅读全文
posted @ 2012-08-14 10:19 Naix_x 阅读(137) 评论(0) 推荐(0)
摘要:题目链接写的太渣了,依旧RE了几次。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 char str[500001][101]; 5 char word[500001]; 6 char ch[5001]; 7 struct node 8 { 9 int flag; 10 struct node *next[26]; 11 }; 12 int num = 1; 13 struct node *build() 14 { 15 int i; 16 struct... 阅读全文
posted @ 2012-08-13 20:36 Naix_x 阅读(217) 评论(0) 推荐(0)
摘要:题目链接我那个纠结啊。。。。看了大半天终于,把tire树敲出来,数组开小RE了N次,还死活以为是指针越界别的什么的。。。没看开始字符数组开小了。。无语啊。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 char word[50001][101]; 5 struct node 6 { 7 int flag; 8 struct node *next[26]; 9 };10 struct node *build()11 {12 int i;13 struct node *p;1 阅读全文
posted @ 2012-08-13 16:56 Naix_x 阅读(237) 评论(0) 推荐(0)
摘要:题目链接和求最大子矩阵和,神似。。。宝哥用树状数组做的,数据量挺小的,我直接暴力O(n^2)水过了。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],o[101][101],map[101][101],key[101][101]; 4 int main() 5 { 6 int i,j,x,y,n,m,nu,r,c,max; 7 while(scanf("%d",&nu)!=EOF) 8 { 9 if(!nu) break;10 memset(p,0,sizeof(.. 阅读全文
posted @ 2012-08-12 19:34 Naix_x 阅读(174) 评论(0) 推荐(0)
摘要:题目链接先是经典的DP,敲的不熟啊,很久没打了吗?初始化都忘了,调试了会,然后过了样例各种WA,不过也应该,那次多校完,就听说是编辑距离,就按照等于算的,看了下题解是小于等于,越来越不愿意看题了。1#include<stdio.h>2#include<string.h>3#include<stdlib.h>4#include<math.h>5#defineN1000000006intmin(intx,inty,intz)7{8intq;9q=x;10if(q>y)11q=y;12if(q>z)13q=z;14returnq;15}16 阅读全文
posted @ 2012-08-12 16:34 Naix_x 阅读(207) 评论(0) 推荐(0)
摘要:题目链接问了下学长,开始质量+价值反着背包,老是WA,油耗作为体积,核电做价值就AC了。。反着背的时候 没取最小值啊 。。。。又想当然的以为大于1/2的时候,输出就行了,得取最小啊!!!! 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define N 10000000 6 int p[101][101],low[101],v[101],key[20000]; 7 int main() 8 { 9 int t,i,j, 阅读全文
posted @ 2012-08-11 19:28 Naix_x 阅读(173) 评论(0) 推荐(0)
摘要:题目链接好繁琐,想了好半天,开始以为暴搜。。比赛时一直卡这个题了,暴搜不出结果换了一个5维背包。。。瞎改一下过了,样例。。。交WA。。再改还是WA。。。自己对背包,理解的太肤浅啊。。。其实我也不知道为什么过,在多次,WA后,正着写就A了,倒着写就是WA。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 int p[6],o[6],kk[1001]; 6 int cl[3001][6],vl[3001]; 7 int q 阅读全文
posted @ 2012-08-11 15:36 Naix_x 阅读(342) 评论(0) 推荐(0)
摘要:题目链接裸Kruskal。注意两个圆想加的时候特判。无奈比赛时,没看懂题意。。求翻译啊。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 struct node 6 { 7 int sv; 8 int ev; 9 double w;10 }p[100000];11 int o[101];12 double x[101],y[101],z[101],r[101];13 int num;14 double sum1;15 i 阅读全文
posted @ 2012-08-11 14:53 Naix_x 阅读(173) 评论(0) 推荐(0)
摘要:题目链接蛋疼的精度,蛋疼的多组数据。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define eps 1e-9 6 double a,b; 7 double getsum(double c) 8 { 9 double p,sum = 0;10 p = (a+b+c)/2;11 sum += sqrt(p*(p-a)*(p-b)*(p-c));12 sum += c*c/4;13 return sum;14 }15 阅读全文
posted @ 2012-08-10 20:32 Naix_x 阅读(216) 评论(0) 推荐(0)
摘要:题目链接调试了好一会。。把模版上的lz标记,如何满足题意就OK了。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 100001 5 int p[4*N],lz[4*N]; 6 void pushup(int rt) 7 { 8 p[rt] = p[rt<<1]+p[rt<<1|1]; 9 }10 void pushdown(int rt,int m)11 {12 if(lz[rt])13 {14 lz[rt<<1 阅读全文
posted @ 2012-08-10 17:30 Naix_x 阅读(169) 评论(0) 推荐(0)
摘要:题目链接这个真费劲。。。其实我也不懂 为什么。。。大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除。。。多敲几遍,多调试一下,看看中间过程,就应该理解了。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 100001 5 #define ll __int64 6 ll p[4*N],lz[4*N]; 7 void pushup(int rt) 8 { 9 p[rt] = p[rt 阅读全文
posted @ 2012-08-10 16:16 Naix_x 阅读(207) 评论(0) 推荐(0)
摘要:题目链接线段树 不熟啊。。。#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 262145__int64 sum;struct node{ int l; int r; __int64 v;}p[4*N];void push(int rt){ p[rt].v = p[rt<<1].v+p[rt<<1|1].v;}void build(int l,int r,int rt){ int m; p[rt].l = l; p[rt].r = r; if(l == 阅读全文
posted @ 2012-08-10 10:35 Naix_x 阅读(155) 评论(0) 推荐(0)
摘要:题目链接我没看清题目用了int+四舍五入竟然搞了30次。。。三分随便从网上找了个模版。。。话说当时感觉应该是三分,可是就是这么悲剧。。#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 50001struct node{ double x; double w;} p[N];int n;double getsum(double mid){ int i; double tt,sum = 0; for(i = 0; i <= n-1; i ++) { tt = p[i].... 阅读全文
posted @ 2012-08-09 21:07 Naix_x 阅读(228) 评论(0) 推荐(0)
摘要:题目链接找最大,这里居然会超时。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define N 200001 5 struct node 6 { 7 int l; 8 int r; 9 int v;10 }tree[4*N];11 int max(int a,int b)12 {13 return a>b?a:b;14 }15 void build(int l,int r,int rt)16 {17 int m;18 tree[rt].l = l;19 ... 阅读全文
posted @ 2012-08-09 11:56 Naix_x 阅读(172) 评论(0) 推荐(0)
摘要:题目链接这个题,用完树状数组,再用线段树水过。线段树,却是感觉比树状数组的功能强多了。只要把线段树的思想理解,然后把实现过程,递归过程了解,单点更新就没问题了。#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 50001struct node{ int l; int r; int v;}tree[4*N];void build(int l,int r,int rt){ int m; tree[rt].l = l; tree[rt].r = r; if(l == r) ... 阅读全文
posted @ 2012-08-09 10:45 Naix_x 阅读(150) 评论(1) 推荐(0)
摘要:题目链接比赛的时候没做出来,直接没去搞,以为树形DP,赛后问了下学长是01背包。。。。当时也想过,哎,有点坑了。。。又搓了,今天下了一下决心一定要做出来,开始只是简单的按,x/y拍,之后按x拍,在多次WA后,又忍不住问了下学长,还要考虑象限的问题。。。然后按y正负排,再x/y排,再按x的绝对值排,还是无奈的wa。。。最后自己查出数据没过。。3 100 1 9 90 -1 1 10 2 2 2哎,快排最后版本,按y正负排,再x/y排,再按x的绝对值排,再按y的绝对值排。 1 #include <stdio.h> 2 #include <string.h> 3 #inclu 阅读全文
posted @ 2012-08-08 21:30 Naix_x 阅读(197) 评论(0) 推荐(0)
摘要:题目链接参考了很多资料,博客,看了很多对这个算法的介绍,理解了一点。Bellman_Ford算法主要是处理权值存在负权的时候的情况复杂度,O(n*e),主要思想就是利用,如果最短路存在,则最多加入n-1条边,如果超过n-1,还可以继续松弛,就是存在负权回路。这个题目就是判断是否存在负权回路。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100000000 4 int dis[1000],v,n; 5 struct edge//记录所有边的信息 6 { 7 int sv;//起点 8 int ev;/... 阅读全文
posted @ 2012-08-08 10:02 Naix_x 阅读(251) 评论(0) 推荐(0)
摘要:状态压缩。。。 按位与 & and 全一则一 (bitwise AND) 否则为零 按位或 | or 有一则一 (bitwise OR) 否则为零 按位取反 ~ not 是零则一 (bitwise NOT) 是一则零 按位异或 ^ xor 不同则一 (bitwise XOR) ... 阅读全文
posted @ 2012-08-06 20:14 Naix_x 阅读(133) 评论(0) 推荐(0)
摘要:题目链接今天做了好几个模版最小生成树。。。贴一个kurskral. 1 /* 2 HDU 1301 Jungle Roads 3 最小生成树Kurskal模版 4 */ 5 #include <stdio.h> 6 #include <string.h> 7 #include <stdlib.h> 8 int num,sum; 9 int o[101];10 struct edge11 {12 int sv;13 int ev;14 int w;15 } p[5000];16 int cmp(const void *a,const void *b)17 {1 阅读全文
posted @ 2012-08-06 14:25 Naix_x 阅读(163) 评论(0) 推荐(0)
摘要:二分查找,思想很简单,在很多书中都有介绍,如果查找的元素一定存在序列中,实现起来简单一些。但是有的时候元素并不存在,就要根据题目中的要求,去判断是去求上界还是去求下界。以下内容参考此博客,这个博客讲的很不错,参考了一下。以下所有的题目,都是递增序列。 HDU 4217 Data Structure?题目大意就是让把第几大的元素找到,然后把这个元素删去,算出删去元素的和。这个题的一种解法是用树状数组记录,然后中间用到二分,这个时候因为getsum(i)存的是前i个数有有几个元素,所以第一个等于关键值的i,才是要求的结果。最后str是我们要求的结果。关键代码:1 while(str < en 阅读全文
posted @ 2012-08-05 20:35 Naix_x 阅读(221) 评论(0) 推荐(0)
摘要:题目链接这是线段树的模版题。我用二分查找做的,自己二分太弱了,最近一直发现我不会写二分,在我还没有调试出二分查找求上界的时候,队友已经用线段树过了。。。。又托了好久,今天想起来,系统的学习一下二分。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 struct node 5 { 6 __int64 da; 7 int id; 8 }p[200001]; 9 int cmp(const void *a,const void *b)10 {11 return (*(struct 阅读全文
posted @ 2012-08-05 17:25 Naix_x 阅读(230) 评论(0) 推荐(0)
摘要:题目链接简单求反射点。。。这种几何题,写成程序怎么这么容易错啊。4Y。。。中间各种小错误。。#include <stdio.h>#include <string.h>#define eps 0.00000001double xmi,ymi,xx,yy;void line(double x1,double y1,double x2,double y2,double xs,double ys)//求(xs,ys)在直线上的对称点{ double k1,k2,b1,b2; if(y2 == y1) { xmi = xs; ymi = 2*y1 - ys;... 阅读全文
posted @ 2012-08-05 14:01 Naix_x 阅读(167) 评论(0) 推荐(0)
摘要:题目链接这算是最简单的几何了吧。。。比赛的时候都没敢去做。。。唉,对积分信心不足啊。。各种变量,各种算。。。竟然还是1Y。。 1 #include <stdio.h> 2 #include <string.h> 3 #define eps 0.00000001 4 int main() 5 { 6 double x1,x2,x3,y1,y2,y3,w1,w2,q1,q2,q3,q4; 7 double a,b,k1,ans1,ans2,k2,c,ans; 8 int t; 9 scanf("%d",&t);10 while(t--)11 {1 阅读全文
posted @ 2012-08-04 16:00 Naix_x 阅读(162) 评论(0) 推荐(0)
摘要:题目链接也知道应该是用扩展欧几里得做,而且是裸模版题,无奈方程一直想错,想了30分钟后,放弃去搞更坑爹的连连看。。。 1 #include <stdio.h> 2 #include <string.h> 3 int x,y; 4 int ext_eulid(int a,int b) 5 { 6 int t,d; 7 if(b == 0) 8 { 9 x = 1;10 y = 0;11 return a;12 }13 d = ext_eulid(b,a%b);14 t = x;15 x = y... 阅读全文
posted @ 2012-08-04 15:04 Naix_x 阅读(223) 评论(0) 推荐(0)
摘要:题目链接以前做个一个题,n很小,今天又发现这个问题,没想到n这么大还要取模,在改了以前那个,无奈第三组数据就是过不了,不是WA就是TLE。。。唉,看了讨论,发现需要找规律,思维被前一个题局限住了。简化版的HDU1207题解。 1 #include <stdio.h> 2 #define N 50001 3 int p[N]; 4 int main() 5 { 6 int i,j = 1,k = 2,u = 2; 7 p[1] = 1; 8 for(i = 2;i <= 50000;i ++) 9 {10 p[i] = p[i-1] + k;11 ... 阅读全文
posted @ 2012-08-03 16:22 Naix_x 阅读(357) 评论(0) 推荐(0)
摘要:题目链接这不是逼我吗,写了个BFS居然超时了。 1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 int i; 6 while(scanf("%d",&i)!=EOF) 7 { 8 if(i == 0) break; 9 if(i == 1)printf("1\n"); 10 else if(i == 2)printf("10\n"); 11 else if(i == 3)printf("111\n"); 12 阅读全文
posted @ 2012-08-03 15:41 Naix_x 阅读(284) 评论(0) 推荐(0)
摘要:题目链接题目描述难懂。简单一句话,找和0在一个集合的。 1 #include <stdio.h> 2 #include <string.h> 3 int p[30001]; 4 int find(int x) 5 { 6 int t,r; 7 r = x; 8 while(x != p[x]) 9 {10 x = p[x];11 }12 while(r != x)13 {14 t = p[r];15 p[r] = x;16 r = t;17 }18 retur... 阅读全文
posted @ 2012-08-03 13:07 Naix_x 阅读(149) 评论(0) 推荐(0)
摘要:题目链接传纸条的加强版,会了那个,这个也就没问题了。数据范围特别小。6维的也能过吧。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[21][21],o[61][21][21][21]; 4 int main() 5 { 6 int i,j,k,u,n,max,t; 7 int a[9] = {0,0,0,-1,-1,-1,0,-1}; 8 int b[9] = {0,0,-1,0,-1,0,-1,-1}; 9 int c[9] = {0,-1,0,0,0,-1,-1,-1};10 scanf("... 阅读全文
posted @ 2012-08-03 09:18 Naix_x 阅读(215) 评论(0) 推荐(0)
摘要:今天突然发现memset的原理,如memset(p,0,sizeof(p)),这句话特别常见,讲所有的元素初始化为0,但是memset(p,1,sizeof(p)),却是将所有的元素初始化为16843009,以前也知道不能初始化为1,但是原因就不得而知了。那天研究别人代码,发现一句相当于是memset(p,243,sizeof(p))的语句,却是把整个数组赋值为-202116109,我十分不解。。本来想就算了的,但还是查一下百度。。。原来memset是将1个字节(8位数字)初始化为那个数,所以前面的问题都可以解释了,1的二进制是00000001,int有4个字节,所以初始化为所有的数初始... 阅读全文
posted @ 2012-08-02 19:01 Naix_x 阅读(1054) 评论(0) 推荐(0)
摘要:题目链接这是拓扑排序? 我很纳闷。。有重边WA了N次。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[501][501],o[501],n,k[501],z; 4 void dfs() 5 { 6 int i,j,nu = 1; 7 while(nu <= n) 8 { 9 if(i == n+1)10 break;11 for(i = 1; i <= n; i ++)12 {13 if(o[i] == 0&&!k[i])1... 阅读全文
posted @ 2012-08-02 10:57 Naix_x 阅读(166) 评论(0) 推荐(0)
摘要:题目链接加强版的传纸条,必须用三维解法。而且要注意初始化成负数,不然就会WA到死。。。看大神代码,用memset初始化负数。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[301][301],o[621][301][301],i,j,k; 4 int getmax(int a,int b,int c,int d) 5 { 6 int max; 7 max = a; 8 if(max < b) 9 max = b;10 if(max < c)11 m... 阅读全文
posted @ 2012-08-02 09:30 Naix_x 阅读(216) 评论(0) 推荐(0)
摘要:题目链接第一个多进程DP,在Vijos做的第一个题是三取方格数。。。然后发现,这种DP,没见过。。。然后最搞笑的是,做CF的时候,E题神似那种问题,后悔没认真学一下,然后从基础学起,看了个讲多进程的博客,搞一下这个题。。。先是O(n^4)的暴力解法。这个题n m都是小于50的。所以暴力的方法也过了。o[i][j][k][u] 代表第一个人到达i,j第二个人到达k,u的取得最大值,其实我一直很疑惑的一个问题是,如何判断不能重复的走的方法,看博客上的处理,原来如此啊。只需要简单的特判一下 i ==k&&j == u如果为真的话,则max+p[i][j]就行了,假的话要max+p[i 阅读全文
posted @ 2012-08-01 19:09 Naix_x 阅读(310) 评论(0) 推荐(0)
摘要:做DP,已经有一段时间了,虽然还有很多不会的,树形DP,数位DP,状态压缩DP。。。不过也做过很多各种一维的,二维,记录一下自己做过的题,为以后整理模版,复习什么的提供方便吧。以后会不断更新!(写完发现,好多水题啊) 一定要独立思考!!! 经典入门题:最长上升子序。O(n^2)的。。话说n*log(n)的还不会呢。。。SDUT 1299 数塔 HDU 2084 数塔 最长公共子序 HDU 1159Common Subsequence 最大子段和 HDU 1003 Max Sum 编辑距离 SDUT 1225 编辑距离 杭电的DP专题 HDU 1058Humble Numb... 阅读全文
posted @ 2012-08-01 14:43 Naix_x 阅读(411) 评论(0) 推荐(0)
摘要:题目链接这个题,数据很变态。。WA了N次。。。看DISCUSS,过的。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 125001 4 int p[60][60][60],o[60][60][60]; 5 int qua[N],qub[N],quc[N]; 6 int x[7] = {0,0,0,0,-1,1}; 7 int y[7] = {1,-1,0,0,0,0}; 8 int z[7] = {0,0,1,-1,0,0}; 9 int main()10 {11 int i,j,k,a,b,c,t,tim 阅读全文
posted @ 2012-08-01 10:55 Naix_x 阅读(173) 评论(0) 推荐(0)
摘要:题目链接普通的DFS。。。输出字典序最大的。。。我竟然没注意。。#include <stdio.h>#include <string.h>char p[31],o[31],max[31];int k[31];int ans,z,len;void dfs(int step,int sum){ int i; if(step == 5&&sum == ans) { z = 1; o[5] = '\0'; if(strcmp(o,max) > 0) { strcpy(max,o); } ... 阅读全文
posted @ 2012-08-01 10:52 Naix_x 阅读(171) 评论(0) 推荐(0)

点击右上角即可分享
微信分享提示