07 2012 档案

摘要:题目链接没早发现这个DP,一直纠结各种图论题,蛋疼。。无奈水平太菜,最后两个小时都没搞出,本来想开10个标记数组的。。。。搞到最后半小时,发现同颜色的不会算,暴力吧。。。然后有个小细节没搞好,计算的时候。WA了,无奈还有10分钟,唉,已无力,查数据。。吃完饭,查出数据。。。过了。。。200+的DP,写的纠结。。。这次又是被虐了。。。QC只出了一个线段树模版,这个没做出,不应该啊,感觉数据应该不会很强,不会乱搞啊。。。 1 #include <stdio.h> 2 #include <string.h> 3 int rr[1001][1001],rc[1001][1001 阅读全文
posted @ 2012-07-31 19:20 Naix_x 阅读(266) 评论(0) 推荐(0)
摘要:题目链接算是 有公式把。一个数的可以化成,素数相乘的形式,约数个数 = 每个素数的次幂+1的乘积。知道了这个,还有3个需要注意。。。。我竟然错了9次。。。哭死了。。。。注意 1 的情况特判。 注意在sqrt(N)的范围以外的素数,直接输出2。含有sqrt(N)范围以外的的素数的 约数的非素数,找的时候特判一下,最后结果*2; 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define eps 0.00000001 5 int p[100001],o[4001],k[4000 阅读全文
posted @ 2012-07-31 10:31 Naix_x 阅读(303) 评论(0) 推荐(0)
摘要:题目链接当以为是神题的时候,其实他是个恶搞题。挺不错的一个题。耐下心来,仔细想想就OK。View Code 1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 long long a,b,n; 6 while(scanf("%lld%lld%lld",&a,&b,&n)!=EOF) 7 { 8 if(!a&&!b&&!n) break; 9 n = n%5;10 if(n == 0)11 printf("%lld\ 阅读全文
posted @ 2012-07-31 09:52 Naix_x 阅读(241) 评论(0) 推荐(0)
摘要:表示水出A和B,C没看懂,E看懂了以前貌似还见过不会做,CE应该都是DP。。。唉,DP,啊。。。。A题3分钟,B题卡了错了4次,很多2B错误。。把trick都想清楚了,这个基本属于乱搞题了。。。43分钟做出5Y了第二个,还用这个题,查了3个,挂了4个。。。赚了,然后就是围观,别的题。。。话说,rating大张啊,变蓝了。。。A题 水。。。#include <stdio.h>#include <string.h>int main(){ int i,j,n,m,z = 0; scanf("%d%d",&n,&m); for(i = 0;i 阅读全文
posted @ 2012-07-31 09:48 Naix_x 阅读(197) 评论(0) 推荐(0)
摘要:题目链接好久 好久 好久 没搞过多重背包的题了,不过还是挺模版的。加上二进制优化了,不加目测会超时。每次都感觉自己写的转换二进制,这么搓呢。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 int p[N],v[N]; 5 int main() 6 { 7 int i,j,k,c,num,n,sum,vv,max; 8 while(scanf("%d",&c)!=EOF) 9 {10 memset(p,0,sizeof(p));11 memset(v,0,.. 阅读全文
posted @ 2012-07-30 16:14 Naix_x 阅读(224) 评论(0) 推荐(0)
摘要:题目链接知道算法后,就简单多了,虽然对算法也不是很懂,套上模版就能过。 1 /*POJ 1061 青蛙的约会 2 从题意中很容易得到等式x+mt = y+nt(mod L)//t代表时间 3 移动左右得到 (m-n)t = y-x(mod L); 4 所以 得到(m-n)*a - L*b = y-x的扩展欧几里得,求解a,套上模版就OK了。 5 */ 6 #include <stdio.h> 7 #include <string.h> 8 __int64 x,y; 9 __int64 ext_eucld(__int64 a,__int64 b)10 {11 __int6 阅读全文
posted @ 2012-07-30 13:26 Naix_x 阅读(183) 评论(0) 推荐(0)
摘要:题目链接表示 完全 从学长的文档上照搬的。这才是真正的扩展的欧几里得,以下内容从文档上复制的。扩展欧几里得的简易证明过程: 1 如果gcd(a, b) = d 那么一定存在一个整数x, y满足ax+by = d; 2 3 当b == 0时,显然,x = 1, y = 0. d = a; 4 当b != 0时, 设 5 a*x1 + b*y1 = d ;(d = gcd(a, b)) 6 b*x2 + (a%b)*y2 = d; 7 所以 8 a*x1 + b*y1 = b*x2 + (a – [a/b]*b)*y2 9 a*x1 + b*y1 = a*y2 + b*(x2 –... 阅读全文
posted @ 2012-07-30 12:36 Naix_x 阅读(183) 评论(0) 推荐(0)
摘要:题目链接和QC没事搞个练习赛,感觉水题居多,这个是我做的唯一比较印象深刻的。这个题,看着题意 那叫一个纠结啊。然后 有点恶搞,以为BFS,DFS神马的,自己乱写了几个代码,错了两次后,想到了正解。。。幸好认真思考了。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000000 4 int p[5][5],z,o[5]; 5 int main() 6 { 7 int i,j,min,k; 8 z = 0; 9 for(i = 1; i <= 4; i ++)10 for(j = 1; j... 阅读全文
posted @ 2012-07-29 21:52 Naix_x 阅读(243) 评论(3) 推荐(0)
摘要:题目链接不加记忆化 搜索 TLE,加上15ms..... 1 #include <stdio.h> 2 #include <string.h> 3 char str1[201],str2[201],str3[402]; 4 int p[201][201]; 5 int z,len; 6 void dfs(int a,int b,int x) 7 { 8 if(z) return ; 9 if(p[a][b]) return ;10 p[a][b] = 1;11 if(x > len-1)12 {13 z = 1;14 re... 阅读全文
posted @ 2012-07-29 10:29 Naix_x 阅读(144) 评论(0) 推荐(0)
摘要:题目链接赤裸裸的二维树状数组,不用变形什么的。二维树状数组p[i][j]代表的i-lowbit(i)+1 to i ,j-lowbit(j)+1 to j 这个矩阵的和,insert和getsum函数做了一下改变,用两个for来实现插入和求和。又忘记 树状数组 不能为 0,调试了一会,再就是 对求某个区间的和,还是不是很熟悉wa了几次。如求(x1,y1)到(x2,y2)的和,画画图像可以很快得到公式。getsum(x2,y2)+getsum(x1-1,y1-1)-getsum(x2,y1-1)-getsum(x1-1,y2); 1 #include <stdio.h> 2 #inc 阅读全文
posted @ 2012-07-28 10:09 Naix_x 阅读(160) 评论(0) 推荐(0)
摘要:题目链接中规中矩的二维DP,披着背包的外衣,但感觉和背包没有毛线关系吧。状态转移 p[i][j] = max(p[i-1][j-k]+o[i][k]) k:0 to j i代表课程j代表时间. 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],o[101][101]; 4 int main() 5 { 6 int i,j,k,n,m,max; 7 while(scanf("%d%d",&n,&m)!=EOF) 8 { 9 if(!n&&!m) br 阅读全文
posted @ 2012-07-27 20:28 Naix_x 阅读(152) 评论(0) 推荐(0)
摘要:题目链接第一个树形DP,这个题,以前用普通方法搞,WA了,然后知道是树形DP后,以为类似是数塔只不过是在树上而已,原来理解错了。。。参考了很多的解题报告,看了很多关于树形DP的文档。。终于,完成了,感觉非常类似滑雪的记忆化搜索。状态转移分情况讨论一下,有和一个叉连接,和两个叉连接。节点数总是m+1的。 1 #include <stdio.h> 2 #include <string.h> 3 struct tree 4 { 5 int l,r; 6 }p[101]; 7 int o[101][101],key[101],n,m; 8 int map[101][101]; 阅读全文
posted @ 2012-07-27 16:03 Naix_x 阅读(219) 评论(0) 推荐(0)
摘要:题目链接说着这个题难吧,代码真的是非常裸,说简单吧,自己想了好几天,都没想出如何用树状数组。以前见过用hash的方式映射的,为什么就没想到呢。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 500001 5 int p[N],n; 6 struct node 7 { 8 __int64 x; 9 int id;10 }num[N];11 int cmp(const void *a,const void *b)12 {13 return (*(str 阅读全文
posted @ 2012-07-27 13:43 Naix_x 阅读(155) 评论(0) 推荐(0)
摘要:题目链接以前对快排不熟,不会搞结构体快排,今天正巧比赛里有这个题。。。秒杀了。。还是研究树形DP吧。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 struct node 5 { 6 int x; 7 int y; 8 int id; 9 }p[150001];10 int cmp(const void *a,const void *b)11 {12 struct node *c = (struct node *)a;13 struct node *d = (str.. 阅读全文
posted @ 2012-07-27 08:52 Naix_x 阅读(319) 评论(0) 推荐(0)
摘要:真的是好久没写总结了,每天都在忙着刷题,看题,看新的东西,暑假时间多了,更要提高效率。说一下今天的比赛,其实也没啥好说的,或许对于我们来说题目难度有点大,每次我们都是跟题,这样的选择也是无奈啊。。。每次做多校都是被虐。。。在受虐中成长吧,今天的比赛第一个题,不知是数据水,还是就是贪心。。。在怀疑中31分钟1Y了。。。剩下继续找可做的题。。找了半天,发现各种神似图论的题。。第二个神似几何题,然后我觉得好像见过,然后想到做过1维答案是中位数,然后就以为是和中位数,然后悲剧了14次提交,中间各种恶搞啊。。在1-3个小时的时候,现在想想就是一种折磨啊,看着外校的队伍都在过题,实在是痛苦啊,帮着sc.. 阅读全文
posted @ 2012-07-26 18:46 Naix_x 阅读(283) 评论(0) 推荐(0)
摘要:题目链接其实这个就是经典的DP,编辑距离,状态转移啥的,在书上讲的很详细,这个题,要输出路径。中间注意在删除和插入的时候要把路径上的位置改变,WA了3次。。。基本上是自己盲查数据查到的。。。开始的时候并不是用队列存的每一种操作,想当然的以为每个位置都只有一个操作,没想清楚,va aaaav。。然后就是这个位置的变化。。。没有注意到插入,注意了插入,又忘记了删除,abcde,deabc。。。总之,过程很曲折。。 1 #include <stdio.h> 2 #include <string.h> 3 char str1[100],str2[100]; 4 int p[10 阅读全文
posted @ 2012-07-26 10:36 Naix_x 阅读(545) 评论(0) 推荐(0)
摘要:题目链接很不错的一个DP,结果让我糟蹋了。。想了半天把状态方程想出来,结果编程的时候,把一个1写成i了,在SCF和QC的帮助下查到了。。。真悲剧啊20+的提交。。。题意:老板雇人有,招人费,工人工资,开除人的费用。给出第几个月需要几个人。问最少的花费。二维DP。i代表月份,j代表在这个月的人数。所以这个月的情况跟上个月有关系,状态转移方程o[i][j] = min (o[i-1][k] +新的花费);按说1打成了i,应该是很大的错误,怎么过的数据啊。。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 10 阅读全文
posted @ 2012-07-25 21:02 Naix_x 阅读(221) 评论(0) 推荐(0)
摘要:题目链接题目直接说明题意了,求最长上升的公共子序。开一个标记数组,标记上一个匹配的数字就行。这个题坑爹的是输出格式,题目中根本没有说明,不过,猜猜就知道是每个样例之间有空行,还果真是。。。PS:这样是瞎搞过的。。。。杭电数据水了。。。2012.8.13PS:这份代码是正解,这个坑过了好久了,才来添。。。其实就是把dp[i][j][k],然后多一维记录上升长度为k,最小的数是多少。。。然后+各种优化,时间复杂度降低到O(n^2),然后空间复杂度也降了很多。。。2012.11.6 1 #include <cstdio> 2 #include <cstring> 3 usin 阅读全文
posted @ 2012-07-25 16:27 Naix_x 阅读(166) 评论(5) 推荐(0)
摘要:题目链接和以前HDU1081很类似。1081有两种做法,一种是直接压缩成一维,一种是利用矩形内部加减。这个题,只能用后者吧,反正我用的后边一种方法。 1 #include <stdio.h> 2 #include <string.h> 3 __int64 p[1000][1000],o[1000][1000],sum[1000][1000]; 4 int main() 5 { 6 int i,j,m,n,t,x,y; 7 __int64 max; 8 scanf("%d",&t); 9 while(t--)10 {11 memset(p,.. 阅读全文
posted @ 2012-07-25 16:06 Naix_x 阅读(171) 评论(0) 推荐(0)
摘要:题目链接map建哈希,题目中NC不知道搞神马的。。。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 #include <map> 6 #include <queue> 7 #define N 16000001 8 using namespace std; 9 map <string,bool> p;10 char o[N],k[N];11 int main()12 {13 int t,i, 阅读全文
posted @ 2012-07-25 15:32 Naix_x 阅读(146) 评论(0) 推荐(0)
摘要:题目链接当看懂这个题意的时候,就没啥难度了,百练上有个中文版的数据一模一样。。。普通O(n^2)DP。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int o[2000]; 5 struct node 6 { 7 int x,y; 8 int h; 9 }p[2000];10 int cmp(const void *a,const void *b)11 {12 return (*(struct node *)a).x >(*(struct node *)b).x 阅读全文
posted @ 2012-07-25 14:52 Naix_x 阅读(143) 评论(0) 推荐(0)
摘要:今天讲的是高精度加法减法。整理一下这部分,当模版了。。高精度加法,无小数部分。百炼 2981大整数加法算是精简了一点。 1 #include <stdio.h> 2 #include <string.h> 3 int p1[300],p2[300]; 4 int main() 5 { 6 char str1[201],str2[201]; 7 int i,len1,len2,max; 8 scanf("%s%s",str1,str2); 9 len1 = strlen(str1);10 len2 = strlen(str2);11 for(i =.. 阅读全文
posted @ 2012-07-25 10:49 Naix_x 阅读(682) 评论(3) 推荐(0)
摘要:题目链接和上个题一样。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define eps 0.0000001 5 int gcd(int a,int b) 6 { 7 return b == 0?a:gcd(b,a%b); 8 } 9 int main()10 {11 double sum;12 int i,n,m;13 __int64 s;14 while(scanf("%d%d",&n,&m)!=EOF)15 {16 sum = 阅读全文
posted @ 2012-07-24 17:24 Naix_x 阅读(168) 评论(0) 推荐(0)
摘要:题目链接看着真痛苦啊,看组合数学上的东西看不懂。。。看了好多人的题解。。根本不懂为毛线是这样做。。。公式是肿么推导的。。。PS:和外校的某牛交流了后,给我发了个PDF的程序设计中的组合数学,话说那本书是以前还看过,确实这本书上的例题更简单一点。。。貌似这样的,这个公式G是代表可以置换的方式个数,如此题,可以转0个 1个 ...n-1,共n种可能,翻转也有n种置换方式,奇偶数的时候情况不同,而后便就是代表每一种置换都不改变的可能,如这个题,有4个点的时候,转0度的时候肯定都不改变,3^4,而转1个也就是90度的时候,有3种(颜色全部相同的时候),转2个的时候有3^2次方,也就是不相邻的两个点要颜 阅读全文
posted @ 2012-07-24 16:22 Naix_x 阅读(225) 评论(0) 推荐(0)
摘要:题目链接用优先队列,特别方便。 1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <vector> 5 #include <algorithm> 6 using namespace std; 7 int main() 8 { 9 int n,i;10 __int64 sum,a,b;11 scanf("%d",&n);12 priority_queue< __int64 ,vector<__int64& 阅读全文
posted @ 2012-07-23 13:21 Naix_x 阅读(191) 评论(0) 推荐(0)
摘要:练习STL中的map。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <map> 5 using namespace std; 6 map <string,int> p; 7 int main() 8 { 9 int i,j,len,z;10 char str[101];11 char o[4];12 while(scanf("%s",str)!=EOF)13 {14 if(str[0] == '*' 阅读全文
posted @ 2012-07-23 13:02 Naix_x 阅读(182) 评论(0) 推荐(0)
摘要:题目链接注意两点,倒着搜,效率高,注意0和1时候的特判。。。忘了UVA的longlong,CE一次。 1 #include <stdio.h> 2 #include <string.h> 3 int p[100],z; 4 long long n; 5 void dfs(long long n,int step) 6 { 7 int i; 8 if(z) return ; 9 if(n == 1)10 {11 z = 1;12 for(i = step-1; i >= 1; i --)13 printf("... 阅读全文
posted @ 2012-07-22 20:48 Naix_x 阅读(194) 评论(0) 推荐(0)
摘要:题目链接找出最高一个线段覆盖吧,很明显的O(n^2)的DP,注意排序的时候按长度排序。WA了一次,没有注意到题目中their endpoints do not coincide,他们的端点不能重合,我还以为输出要顺序有错误。。。得亏又看了遍题目。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 struct segment 5 { 6 int x,y,len; 7 int num; 8 }p[501]; 9 int o[501],k[501],q[501];10 int 阅读全文
posted @ 2012-07-22 15:56 Naix_x 阅读(234) 评论(0) 推荐(0)
摘要:题目链接二维DP,开两个标记数组记录前i个数1的个数,和0的个数。1Y。状态转移方程:p[i][j] = min(p[i-k][j-1]+(sum1(i)-sum1(i-k))*(sum0(i)-sum0(i-k))(开始的时候i-k想成k了。。自己试了几个数据没过,手算查错) 1 #include <stdio.h> 2 #include <string.h> 3 #define N 10000000 4 int p[501][501],sum1[501],sum0[501]; 5 int main() 6 { 7 int n,m,i,j,k; 8 scanf(&qu 阅读全文
posted @ 2012-07-22 11:16 Naix_x 阅读(314) 评论(4) 推荐(0)
摘要:题目链接看到题目,没想到有什么好办法,也想到了树状数组,然后二分查找。。。本来感觉复杂度特别高,交了几次超时,然后我发现看别人用相同思路却过了,我写的可能死循环了。不过没查到数据,也可能效率低了。查查白书看看书上代码。while(str < end)//二分找到关键值{ mid = str+(end-str)/2; if(p[mid] == a) break; else if(p[mid] > a) end = mid; else str = mid+1;}此题代码 1 #include <stdio.h> 2 #includ... 阅读全文
posted @ 2012-07-21 20:55 Naix_x 阅读(236) 评论(0) 推荐(0)
摘要:题目链接也是很久以前做过的题了,TLE了5次,和前几天做的POJ那个上的题差不多,开两个标记数组,分别记录左右第一个比他小的位置。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 __int64 p[N],right[N],left[N]; 5 int main() 6 { 7 int i,n,j; 8 __int64 max; 9 while(scanf("%d",&n)!=EOF)10 {11 if(!n) break;12 max = 0;13 ... 阅读全文
posted @ 2012-07-21 17:24 Naix_x 阅读(168) 评论(0) 推荐(0)
摘要:题目链接几个月之前做的一个题了,开始想时就看出应该是个01背包问题,又发现不太一样,貌似应该是有种贪心策略,把最大的挑出来最后还有5块钱的再买,剩下的体积用01背包去求最优选择,当时WA了3次,以为算法有问题,难道用o(n^3)算法吗。。枚举每一种物品然后用01背包的取得的最优解+物品的价值,然后最后找最大的。。感觉复杂度有点高啊。。。然后就放下了,今天又想起来了,搜了下题解,原来是饭卡开始的时候<5 的时候 情况漏了。。。。我晕。。。。 1 #include<stdio.h> 2 #include<string.h> 3 int p[1001],k[1001]; 阅读全文
posted @ 2012-07-21 15:59 Naix_x 阅读(193) 评论(0) 推荐(0)
摘要:题目链接本来想练习一下堆排序,试了交了几次发现不是MLE,就是WA。。。发现,直接排序会超内存,用优先队列吧,顺便学习一下。。。下个学期学C++,好好学习STL。这个题可恶的精度,unsigned int 刚刚好。。 1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <vector> 5 #include <algorithm> 6 using namespace std; 7 int main() 8 { 9 int n,i;10 long 阅读全文
posted @ 2012-07-21 15:17 Naix_x 阅读(211) 评论(0) 推荐(0)
摘要:题目链接今天学习排序,冒泡和选择,无视了。。。直接上堆排序。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000001 4 int p[N],n,m; 5 void heapjust(int x,int len) 6 { 7 int i,num; 8 num = p[x]; 9 for(i = x*2;i <= len;i *= 2)//二叉树的左儿子是2*x右儿子是2*x+110 {11 if(i < len&&p[i] < p[i+1])i ++;//判断左右儿子 阅读全文
posted @ 2012-07-21 11:06 Naix_x 阅读(207) 评论(2) 推荐(0)
摘要:题目链接普通的DFS。 1 #include <stdio.h> 2 #include <string.h> 3 char p[5][5]; 4 int max,o[5][5],n; 5 int judge(int x,int y) 6 { 7 int i,z = 1; 8 for(i = x+1;i <= n-1;i ++) 9 { 10 if(o[i][y] == 2) 11 { 12 z = 0; 13 break; 14 } 15 e... 阅读全文
posted @ 2012-07-20 21:13 Naix_x 阅读(157) 评论(0) 推荐(0)
摘要:题目链接暴力水过的方式是多样化的。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <stdlib.h> 5 #define eps 0.000000001 6 int p[5],n,m,num; 7 struct tri 8 { 9 int a,b,c,d;10 }o[100001];11 int cmp(const void *a,const void *b)12 {13 struct tri *p = (struct tri*)a;14 s 阅读全文
posted @ 2012-07-20 16:39 Naix_x 阅读(177) 评论(0) 推荐(0)
摘要:题目链接题目 都没看,直接看样例,直接拍代码,1Y。 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101]; 4 int str1[101],str2[101]; 5 int main() 6 { 7 int i,j,n,m,num = 0; 8 while(scanf("%d%d",&n,&m)!=EOF) 9 {10 if(!n && !m)break;11 num ++;12 memset(p,0,sizeof(p));13 for(... 阅读全文
posted @ 2012-07-20 15:27 Naix_x 阅读(161) 评论(0) 推荐(0)
摘要:题目链接继续水过。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 30010 4 #define eps 0.00000001 5 long long p1[N],p2[N]; 6 int main() 7 { 8 int a[6] = {1,5,10,25,50}; 9 int i,j,k,n;10 p1[0] = 1;11 for(i = 0; i <= 4; i ++)12 {13 for(j = 0; j <= 30000; j ++)14 {1... 阅读全文
posted @ 2012-07-20 14:29 Naix_x 阅读(138) 评论(0) 推荐(0)
摘要:题目链接和POJ2406差不多,不过用暴力去找,会超时。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #define N 1000001 5 char str[N]; 6 int next[N]; 7 int main() 8 { 9 int i,j,len,d,a = 0;10 while(scanf("%d%*c",&len)!=EOF)11 {12 a ++;13 if(len == 0)break;14 scanf("%s&qu 阅读全文
posted @ 2012-07-20 13:44 Naix_x 阅读(177) 评论(0) 推荐(0)
摘要:题目链接预处理改一下,就OK了。。。我竟然敲错模版了。。。3Y。一种是暴力,一种更巧妙。直接取余判断 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000001 4 char str[N]; 5 int next[N]; 6 int main() 7 { 8 int i,j,len,d; 9 while(scanf("%s",str)!=EOF)10 {11 if(str[0] == '.')break;12 len = strlen(str);13 nex... 阅读全文
posted @ 2012-07-20 11:08 Naix_x 阅读(166) 评论(0) 推荐(0)
摘要:题目链接第一个KMP,纪念纪念。。。虽然比着模版打的,理解模版,真的好短。 1 #include <stdio.h> 2 #include <string.h> 3 char str1[10001],str2[1000001]; 4 int next[10001]; 5 int main() 6 { 7 int t,len1,len2,num,i,j; 8 scanf("%d",&t); 9 while(t--)10 {11 scanf("%s%s",str1,str2);12 len1 = strlen(str1);13 阅读全文
posted @ 2012-07-20 10:12 Naix_x 阅读(137) 评论(0) 推荐(0)
摘要:题目链接看着就像赤裸裸的母函数,目测10*30000*30000的复杂度会超吧,试试的打吧,特搞笑的好几个月没打了,哎,啥也忘了。。。找找以前做的题,复习了下。。中间小错误不断,最后竟然AC了。。。本来还想打表的。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 30010 4 #define eps 0.00000001 5 long long p1[N],p2[N]; 6 int main() 7 { 8 int a[12] = {5,10,20,50,100,200,500,1000,2000,500 阅读全文
posted @ 2012-07-19 21:40 Naix_x 阅读(189) 评论(0) 推荐(0)
摘要:题目链接今天多校第一场,我酱油了。。。哎,最近做DP,完全没有感觉啊,这个破题,C RE无数次,用C++过了。。。好假。。记录路径的本身 和逆序的最长公共子序。 1 #include <stdio.h> 2 #include <string.h> 3 int p[1001][1001]; 4 int main() 5 { 6 char str[3001]; 7 int i,j,len; 8 while(gets(str)!=0) 9 {10 memset(p,0,sizeof(p));11 len = strlen(str);12... 阅读全文
posted @ 2012-07-19 17:23 Naix_x 阅读(190) 评论(0) 推荐(0)
摘要:题目链接目测二叉堆就是用的排序二叉树。然后还恶搞一下AC代码。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 int num[1001]; 5 int n,z; 6 struct tree 7 { 8 int data; 9 struct tree *left;10 struct tree *right;11 };12 struct tree *build()13 {14 struct tree *p;15 p = (struct tree *)malloc(size.. 阅读全文
posted @ 2012-07-19 10:45 Naix_x 阅读(233) 评论(0) 推荐(0)
摘要:题目链接竟然错了10+,静不下心来啊。开个标记数组记录,记录比第一个比它大的位置。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 80001 4 unsigned __int64 p[N],left[N],sum; 5 int main() 6 { 7 int n,i,j; 8 scanf("%d",&n); 9 for(i = 1;i <= n;i ++)10 scanf("%I64d",&p[i]);11 sum = 0;12 for(i = 阅读全文
posted @ 2012-07-18 21:09 Naix_x 阅读(136) 评论(0) 推荐(0)
摘要:题目链接看到HDU一个大牛写的一篇关于树状数组求区间最值的文章,根据文章做了这个题,研究一上午啊,那篇文章。。。更假的是用GCC提交1000+,用C++交就500+。。。相同的代码,不同的编译器查这么多。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 200001 4 int num[N],p[N]; 5 int n; 6 int lowbit(int t) 7 { 8 return t&(-t); 9 }10 void change()//找最大值初始化11 {12 int i,j;13 fo 阅读全文
posted @ 2012-07-18 14:20 Naix_x 阅读(381) 评论(0) 推荐(0)
摘要:题目链接蛋疼的一个题,根本看不懂天马行空的题意,各种翻译工具也搞不了。。。模版题,我却怎么也没看出怎么套模版来。。。基本上全部参考的解题报告。。。了解了树状数组非常需要注意的地方树状数组时没法搞0的。。。。不然会TLE。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 32100 4 int p[N],level[16000]; 5 int lowbit(int t) 6 { 7 return t&(-t); 8 } 9 void insert(int t,int d)10 {11 while(t & 阅读全文
posted @ 2012-07-17 21:18 Naix_x 阅读(142) 评论(0) 推荐(0)
摘要:题目链接对这个知识不熟啊。。。。自己找了一篇论文,上边一个题,貌似和这个差不多,谁知一点都不一样,怎么也不理解如何通过更改a b之间的全部+1,通过树状数组中更新数组的a和b+1,来操作。。。。实在理解了不了,看了解题报告发现和论文上的题,不一样啊。。。只需要insert(a,1)和insert(b+1,-1)就好了,瞬间我被秒了,意义马上就理解了。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 int p[N],n; 5 int lowbit(int t) 6 { 7 return 阅读全文
posted @ 2012-07-17 15:48 Naix_x 阅读(361) 评论(11) 推荐(0)
摘要:题目链接以前用普通方法150+ms 今天看了书上有这个题的详细树状数组的代码,理解下,敲敲交上居然300ms+,我正纳闷的时候,交上以前的代码TLE了。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 50005 4 int p[N],n;//p[i] 就代表从i - i&(-i)+1到i的和 5 int lowbit(int t)//寻找低位起第一个非0位 6 { 7 return (-t)&t;//如4二进制是100所以就是4,如7二进制为111,是1 8 } 9 void insert 阅读全文
posted @ 2012-07-17 10:20 Naix_x 阅读(172) 评论(0) 推荐(0)
摘要:题目链接省赛热身赛C题,当时还不会DFS。。。我是直接暴力枚举了9个点,加上个小剪枝,去判重复的操作很重要。。。我在DFS中开一个数组记录在这一层是否搜过这个数。开始忘加Case , 2Y。 1 #include <stdio.h> 2 #include <string.h> 3 int p[10],o[10],k[10],z; 4 void dfs(int x) 5 { 6 int sum,sum1,i,j,a; 7 int q[10],w; 8 if(x > 9) 9 {10 sum = k[1] + k[2] + k[3];11 ... 阅读全文
posted @ 2012-07-17 08:29 Naix_x 阅读(194) 评论(0) 推荐(0)
摘要:题目链接和HDU上一个一模一样,数据不一样,这个数据大,不过把那个改改就OK了。。 1 #include<stdio.h> 2 int p[1001][2001]; 3 int main() 4 { 5 int a,b,c; 6 p[1][0]=1;c=0; 7 for(a=2;a<=1000;a++) 8 { 9 for(b=0;b<=c;b++)10 {11 p[a][b]=(4*a-2)*p[a-1][b];12 }13 for(b=c;b>=0;b--)14 ... 阅读全文
posted @ 2012-07-16 19:53 Naix_x 阅读(167) 评论(0) 推荐(0)
摘要:正式集训第一天就是这么带劲。。。先是做杭电上的1个比赛,其实7个都算是自己做的。。。。这不由让我起了复制粘贴的歹心,有些模版还是再敲了一遍,然后就来到了一个以前见过N次,却不屑去做的一个题。。。HDU 1106 排序其实就 3个trick 一开始是5 连续的5 结尾没有5。。。。然后各种改。。。各种交,WA6次之后终于A了。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 __int64 p[100001]; 5 char str[1000001]; 6 int cmp(v 阅读全文
posted @ 2012-07-16 18:41 Naix_x 阅读(186) 评论(0) 推荐(0)
摘要:题目链接赤裸裸的模拟,判断终止语句放错,2Y。 1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 int n,m,s,i,num,x,y; 6 char p[21][21]; 7 int o[21][21]; 8 while(scanf("%d%d%d%*c",&n,&m,&s)!=EOF) 9 {10 if(!n&&!m&&!s) break;11 num = 1;12 memset(o,0,sizeof(o));13 阅读全文
posted @ 2012-07-15 19:58 Naix_x 阅读(160) 评论(0) 推荐(0)
摘要:题目链接单步调试。。。各种调,1Y。 1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 int prim[10000],o[10000]; 5 int p[100000]; 6 int main() 7 { 8 int i,j,k,n,m,z,t,start,end,num; 9 int c1,c2,c3,c4;10 for(i = 1001;i <= 9999;i ++)11 {12 z = 1;13 for(j = 2;j <= sqrt(i);j... 阅读全文
posted @ 2012-07-15 19:55 Naix_x 阅读(228) 评论(0) 推荐(0)
摘要:题目链接只要把钟表想清楚就没问题了,分针一分钟转6度,而时针一分钟转0.5度,1小时转30度,减减算算就OK了。 1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 char end[10] = "0:00"; 6 char p[10]; 7 int i,hour,min,len; 8 double sum; 9 while(scanf("%s",p)!=EOF)10 {11 if(strcmp(p,end)==0)12 break;13 ... 阅读全文
posted @ 2012-07-14 20:47 Naix_x 阅读(189) 评论(0) 推荐(0)
摘要:题目链接寻找以前出现过的数字。。。不要和培训老师一样,用循环。。。PS:这个题好搞啊,编错了两个地方,居然过了样例,然后就AC了。。。误打误撞。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[1000000]; 4 int main() 5 { 6 int z,i,m,l,j,num,a = 0; 7 while(scanf("%d%d%d%d",&z,&i,&m,&l)!=EOF) 8 { 9 memset(p,0,sizeof(p));10 if(!z&a 阅读全文
posted @ 2012-07-14 20:19 Naix_x 阅读(162) 评论(0) 推荐(0)
摘要:题目链接大胆的猜,勇敢的交。。。还好猜对了。 1 #include <stdio.h> 2 int main() 3 { 4 int a,b,t; 5 scanf("%d",&t); 6 while(t--) 7 { 8 scanf("%d%d",&a,&b); 9 printf("%d\n",(a/3)*(b/3));10 }11 return 0;12 } 阅读全文
posted @ 2012-07-14 19:50 Naix_x 阅读(104) 评论(0) 推荐(0)
摘要:题目链接总是敲错,死调,还好打之前想的如何实现想的挺清楚,可是敲的时候老出错,外加x轴和Y轴有点混淆了,调试了40+比打代码的时间都长。。还好1Y。 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],o[101][101]; 4 int x[4] = {-1,0,1,0}; 5 int y[4] = {0,1,0,-1}; 6 int main() 7 { 8 int ti,n,m,a,b,i,j,k,sv,ev,nu,t,r,c,z,rr; 9 int kei,kej; 10 c... 阅读全文
posted @ 2012-07-14 17:36 Naix_x 阅读(219) 评论(0) 推荐(0)
摘要:题目链接理解好题意就没啥问题了,自己判断是否是最后一个元素想错了,导致PE两次,直接搞了个标记变量AC了。。。我用的是栈 模拟所有的元素。 1 #include <stdio.h> 2 #include <string.h> 3 int p[100001]; 4 int main() 5 { 6 int t,n,i,j,start,k,z; 7 int o[21]; 8 scanf("%d",&t); 9 while(t--)10 {11 memset(p,0,sizeof(p));12 memset(o,0,sizeof... 阅读全文
posted @ 2012-07-14 16:16 Naix_x 阅读(193) 评论(0) 推荐(0)
摘要:题目链接以前的时候,大一上的时候以为是大水题,当时连题意都没读懂,再次做枚举16个点,900+,差点就超时了。。。和那个翻棋子特别类似。 1 #include <stdio.h> 2 #include <string.h> 3 int z; 4 char p[4][4]; 5 int o[4][4]; 6 void change(int x,int y) 7 { 8 int i; 9 for(i = 0;i <= 3;i ++)10 {11 if(p[x][i] == '-'&&i != y)12 p[x][i] = '+& 阅读全文
posted @ 2012-07-14 15:36 Naix_x 阅读(200) 评论(0) 推荐(0)
摘要:题目链接被数据给吓到了,本来以为是各种高精度的综合题,又想是否是高深的数学结论题,怎么做出来的人这么多啊。。。看reader的时候同学的BOLG有,发现原来是double 就可以搞,无语。。。。连精度都不卡。。。 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 n; 9 double p,s,str,end;10 while(scanf 阅读全文
posted @ 2012-07-14 15:06 Naix_x 阅读(116) 评论(0) 推荐(0)
摘要:题目链接理解错题意啊。。。。看题解知道到做法后就很简单了,自己想的算法是错误的。。。对Floyd加深一下理解。这个是有向图找最大的环,我理解的题意偏差的太多了。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000000 4 char p[31][100]; 5 double map[31][31]; 6 int n; 7 int judge(char *k) 8 { 9 int i;10 for(i = 1; i <= n; i ++)11 {12 if(strcmp(k,p[i]... 阅读全文
posted @ 2012-07-14 13:22 Naix_x 阅读(219) 评论(0) 推荐(0)
摘要:题目链接第一WA,发现读错题了,以为求最大生成树的最小边。。。再次PE,题目中明明说:There is an empty line after each test case.这不是坑人吗?数据中没有换行还算是比较裸的prim的。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100000000 4 int map[501][501],low[501],o[501]; 5 int main() 6 { 7 int i,j,k,n,t,min,max; 8 scanf("%d",& 阅读全文
posted @ 2012-07-14 11:16 Naix_x 阅读(113) 评论(0) 推荐(0)
摘要:题目链接还是有点裸的,看懂题意就OK了,第一次没有用EOF,超时。。。2Y,输入输出比较繁琐。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000000 4 int map[21][21]; 5 void floyd() 6 { 7 int i,j,k; 8 for(k = 1; k <= 20; k ++) 9 for(i = 1; i <= 20; i ++)10 for(j = 1; j <= 20; j ++)11 {12 ... 阅读全文
posted @ 2012-07-13 18:00 Naix_x 阅读(151) 评论(0) 推荐(0)
摘要:题目链接其实我也纳闷啊,为什么这么长啊。。。。看DISCUSS发现从R到A WA,从A到R就AC了,果真是。。。 1 #include <stdio.h> 2 #include <string.h> 3 char p[201][201]; 4 int o[201][201],x[100000],y[100000]; 5 int time[100000]; 6 int a[4] = {0,0,1,-1}; 7 int b[4] = {1,-1,0,0}; 8 int main() 9 {10 int i,j,k,n,m,start,end,air,aic,num,z;11 阅读全文
posted @ 2012-07-12 21:40 Naix_x 阅读(124) 评论(0) 推荐(0)
摘要:题目链接挺有意思的,我所理解的题意:最少打几个井,本来以为挺简单,最后发现实现的时候搞麻烦了,注意一下往下搜的条件是两个字母,在那个方向匹配上,才能继续搜下去。1Y。 1 #include <stdio.h> 2 #include <string.h> 3 char p[51][51]; 4 int k[12][4] = {{1,1,0,0},{0,1,1,0},//记录所有的字母4个方向,顺序为左上右下 5 {1,0,0,1},{0,0,1,1},{0,1,0,1},{1,0,1,0},//1代表有,0代表没有 6 {1,1,1,0},{1,1,0,1},{1,0,1 阅读全文
posted @ 2012-07-12 20:24 Naix_x 阅读(149) 评论(0) 推荐(0)
摘要:第二次做,第一次做了一个,这次做比第一次好,环境好多了。。第一个水题,居然无语的错了两次,INT64好久没用了,忘记加了,唉,如此水题。。。第二个,思考,看出其贪心本质,自己想了组数据手算验证。。。居然1Y。。。剩下一个半小时就是悲剧。。。看看第三个,貌似可以搞,肯定是后边减前边的,但是数据感觉比较大,看看过D的比较多,然后去看D,看懂了D觉得D应该可以做,先快排,然后历遍一遍,悲剧没注意前后可以相等。。。然后,交了3 次 后错了,查错 还有10分钟,发现bug,额,慌乱中交了几次。。。最终还是没过。。。最后 过了俩题,有进步。。。PS:今天又去搞D,发现超时。。。算法有问题。。。解题报告.. 阅读全文
posted @ 2012-07-12 14:49 Naix_x 阅读(164) 评论(0) 推荐(0)
摘要:题目链接数据小,DFS完,打表。1Y。直接搞会超时,预处理出来会AC。造表代码 1 #include <stdio.h> 2 #include <string.h> 3 #define N 30 4 int k[12]; 5 int p[N][N],r[N],c[N],sr[N],sc[N]; 6 int z,n; 7 void dfs(int x,int y,int step) 8 { 9 int t,i,j;10 if(step == n)11 {12 z ++;13 return ;14 }15 if(x >= st... 阅读全文
posted @ 2012-07-11 21:21 Naix_x 阅读(220) 评论(0) 推荐(0)
摘要:题目链接又是细节啊,结束条件判错了,导致没有全部搜完就结束了,这个错误,检查了好几遍都没发现,终于找AC代码对拍数据,发现了。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],b,w,n,bnu,wnu,bb,ww,sum,z; 4 int x[4] = {0,0,-1,1}; 5 int y[4] = {1,-1,0,0}; 6 void dfs(int r,int c) 7 { 8 sum ++; 9 int i;10 for(i = 0;i <= 3;i ++)11 {12 ... 阅读全文
posted @ 2012-07-11 19:24 Naix_x 阅读(322) 评论(0) 推荐(0)
摘要:题目链接有点找规律的意思,先把所有的情况都预处理出来,m<= 10000 所以说最多只有8个数字改变。#include <stdio.h>#include <string.h>#define N 10000int p[N+1][9],o[9],num;void dfs(int step){ int i; if(num > N) return ; if(step > 8) { num ++; return; } for(i = 1; i <= 8; i ++) { if(!o[i]) ... 阅读全文
posted @ 2012-07-11 18:14 Naix_x 阅读(103) 评论(0) 推荐(0)
摘要:题目链接判断条件没搞好 2Y,全部是0的时候查出错。#include <stdio.h>#include <stdlib.h>#include <string.h>char p[11][11];int key[11][11];int r[11][11],c[11][11],o[11][11],z;int judge(int i,int j){ int a; if(i <= 2) { if(j <= 2) a = 0; else if(j <= 5) a = 1; else if(j <= 8... 阅读全文
posted @ 2012-07-11 18:11 Naix_x 阅读(159) 评论(0) 推荐(0)
摘要:题目链接复杂啊,这到底是模拟题还是BFS啊。。。。数组开小RE一次,2Y。。。调试了好久啊。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000001 4 char p[101][101]; 5 int o[101][101],key[101][101];// key标记,o标记 6 int r[100001],c[100001],ti[100001];//ti记录时间 7 int past[100001],load[100001];//记录路径 8 int main() 9 { 10 int n,m. 阅读全文
posted @ 2012-07-09 13:35 Naix_x 阅读(145) 评论(0) 推荐(0)
摘要:题目链接5Y。。。。居然是因为一个剪枝减导致第一次WA,然后又悲剧了3次,最后感觉自己的程序没啥问题啊,自己乱查 数据,自己想出了一组没有过。。。。3 4 11S..D........终于发现某 一个小的剪枝错了。。。。。这个题杭电文档上搜索的例题,所以剪枝也 没有怀疑,自己实现的 时候搞错了。。。450ms+。。。慢死。。。 1 #include <stdio.h> 2 #include <string.h> 3 char p[10][10]; 4 int o[10][10],n,m,t,endr,endc,z; 5 int a[4] = {0,0,1,-1}; 6 阅读全文
posted @ 2012-07-09 11:02 Naix_x 阅读(156) 评论(0) 推荐(0)
摘要:题目链接这个题1Y,还是想了几个剪枝63ms,如果直接去暴力的10*10的有点大,因为这相当于无向图,只须枚举一半就可以,也就是45个点,其实还是有点悬的,再加一个剪枝,中间加入判断把不符合情况的,直接淘汰。实习回来的第一个题,DFS调试了半天。。。 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],o1[11],o2[11],z,n; 4 void dfs(int x,int y) 5 { 6 int r,c,i,j; 7 if(z) return ; 8 if(o2[x] > o1[x]| 阅读全文
posted @ 2012-07-08 15:58 Naix_x 阅读(159) 评论(0) 推荐(0)
摘要:1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 long long p[64]; 5 int main() 6 { 7 long long i,len,sum; 8 char num[100]; 9 p[0] = 1;10 for(i = 1;i <= 63;i ++)11 p[i] = 2*p[i-1];12 for(i = 1;i <= 63;i ++)13 p[i]--;14 while(scanf("%s",num)... 阅读全文
posted @ 2012-07-04 10:06 Naix_x 阅读(163) 评论(0) 推荐(0)
摘要:题目链接网速真不好啊,题目挺简单的,变量名打错WA了一次。 1 #include <stdio.h> 2 #include <string.h> 3 char p[101][101]; 4 int a[5] = {0,0,1,-1}; 5 int b[5] = {1,-1,0,0}; 6 int num[101],len; 7 void dfs(int x,int y) 8 { 9 int i;10 if(p[x][y] == 'X'||p[x][y] == '#')11 return ;12 else13 p[x][y] = ' 阅读全文
posted @ 2012-07-04 08:48 Naix_x 阅读(135) 评论(0) 推荐(0)
摘要:题目链接和以前做的一个排名(至今未作出)还相似。。。。上班结束回宿舍。。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 10000000 4 int p[101][101],o[101]; 5 int main() 6 { 7 int i,j,k,n,m,sv,ev,z; 8 while(scanf("%d%d",&n,&m)!=EOF) 9 {10 memset(o,0,sizeof(o));11 if(n == 0&&m == 0)break;12 阅读全文
posted @ 2012-07-03 19:48 Naix_x 阅读(114) 评论(0) 推荐(0)
摘要:题目链接好假啊,1Y,我本以为会超时的,看来数据小啊。。。。在经过各种压线之后,目测这个学期不会挂科,淡定,实习完,继续刷题!!! 1 #include <stdio.h> 2 #include <string.h> 3 int p[201][201],o[201],n,z; 4 void dfs(int x,int y) 5 { 6 int i; 7 if(z) return ; 8 o[x] = y;; 9 for(i = 0;i <= n;i ++)10 {11 if(p[x][i] )12 {13 ... 阅读全文
posted @ 2012-07-03 11:07 Naix_x 阅读(164) 评论(0) 推荐(0)
摘要:题目链接在实训的间隙刷个题。。。裸地杰斯特拉。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 10000000 4 int p[1001][1001]; 5 int main() 6 { 7 int i,j,k,t,s,d,sv,ev,w,min,num,min2,max; 8 int a[1001],o[1001],key[1001]; 9 int low[1001];10 while(scanf("%d%d%d",&t,&s,&d)!=EOF)11 {12 m 阅读全文
posted @ 2012-07-02 19:05 Naix_x 阅读(174) 评论(0) 推荐(0)

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