上一页 1 ··· 9 10 11 12 13 14 15 下一页
摘要: 这是我做的的一道线段树题,虽然不完全是自己想出来的,但是收获依然很大,就从这道题开始我的线段树之旅吧!这道题的意思是:在一面墙上张贴宣传画,可以覆盖按照给定的张贴的顺序,求张贴完所有的画后能够看见几张画。由于题目中给出的数据范围很大,1~10000000,所以首先要离散化,然后在用线段树进行更新查找。贴代码:#include<stdio.h>#include<stdlib.h>#include<string.h>struct node//记录画的位置,以便对输入点进行排序{ int x; int num;}s[20004];struct tree//建线段树 阅读全文
posted @ 2012-04-03 15:58 Misty_1 阅读(288) 评论(0) 推荐(0) 编辑
摘要: 这题是用的stl中的map容器做的,刚开始想用暴力来着,看看了别人给的提示,无疑暴力一定会TL,所以改变策略,想通过hash表来做(本来这道题就是在hash的练习里,所以直接想到用hash了),可是无论你是先算前两个还是前三个,都没法确定数组要开多大,第一次先开了一个10w的数组,结果还是不行,因为题目中没给a1,a2,a3,a4,a5的范围,不好开数组。搜了解题报告,看见有人用stl中map容器做的,又去学了下map容器的用法,http://hi.baidu.com/dizemmm/blog/item/29383e4eb564fa00b3de05d6.html其实这题很简单,就是在开数组上有 阅读全文
posted @ 2012-03-08 21:41 Misty_1 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 解决一些数学问题时,能简化公式会省很多事~一看这题的数据就知道有暴力会超,然后上网看了一下别人的思路,是用的欧拉公式,刚开始没弄懂,不敢写,看了书上写的推出的公式,很简单,但推理过程不甚明白,以后慢慢研究,先学会用欧拉公式吧。欧拉φ函数:phi(n)是所有小于n的正整数里,和n互素的整数的个数。n是一个正整数。设n=a1^x1*a2^x2*a3^x3.....*an^xn,那么n的欧拉函数就是:phi(n)=a1^(x1-1)*(a1-1)*a2^(x2-1)*(a2-1)*......an^(xn-1)*(an-1);整理可得:phi(n)=n*(a1-1)*(a2-1)*.......(a 阅读全文
posted @ 2011-12-22 15:08 Misty_1 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 这题的意思就是要求两点之间是否有整数点,刚开始想用斜率做的,但没想出来怎么做,暴力了一下,没过~~上网看了一下别人的思路,果然。。。。自己还是弱啊~这题的思路是相似三角形,若AC之间有整数点F,则必有AB/BC=AE/EF,即AB与BC必有不小于一的公约数,所以直接转化成求AB、BC是否有不为一的最大公约数的问题了~代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 int gcd(int a,int b) 6 { 7 if( 阅读全文
posted @ 2011-12-20 11:56 Misty_1 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 再次鄙视一下自己的英语水平,竟然没读懂题,好吧,我要学英语~~这题很简单,数据给的也很小,只要简单的模拟就过了,意思是:由括号序列S可经P规则和W规则变形为P序列和W序列。p规则是:pi是第i个右括号左边的左括号的数;w规则是:wi是第i右括号与它匹配的左括号之间右括号的数(其中包括它本身)。代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int p[25],s[25]; 5 char str[55]; 6 int main() 7 { 8 int t,n,i,j,k; 阅读全文
posted @ 2011-12-20 09:41 Misty_1 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 感觉自己的dfs学的很烂,正好用这道题练练,顺便再研究一下dfs的思想~这题还有一个要注意的地方就是输出格式的问题,PE了两次~代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int f[15],a[15],b[15]; 5 int n; 6 void dfs(int x,int s) 7 { 8 int i; 9 b[s]=a[x];10 if(s==6)11 {12 for(i=1;i<=6;i++)13 {14 i... 阅读全文
posted @ 2011-12-19 17:24 Misty_1 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 感觉自己很菜,一个栈的应用,写了好久,还是代码能力弱啊~刚开始直接用的<stack>开了两个栈,结果在判空时出现问题,改用自己写的栈,还是WA,一怒之下上网查了一下,原来是我理解有问题,汗~~我们在算加减乘除的时候,总是先算乘除,再算加减,还有一点就是,再算加减的时候也要从左往右算,否则就WA了。自己写的代码,WA了: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int jud(char a,char b) 5 { 6 if((a=='+'||a= 阅读全文
posted @ 2011-12-19 15:13 Misty_1 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 很水~就是记录j的位置就行了,可是第一次WA了,以为是自己理解有误,上网上看了一下,原来是并行的问题。//这样写是错的if(x==s)s=y;if(y==s)s=x;要用if...else if代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 int t,m,x,y,s; 7 scanf("%d",&t); 8 while(t--) 9 {10 scanf("%d",&m);11 s= 阅读全文
posted @ 2011-12-17 16:05 Misty_1 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 刚看到这题就知道要有筛选,开始没想到怎么做,后来想,能不能将素数先筛出来,素数都为1嘛,然后再用暴力求剩下的,结果悲哀的RE了,于是上网查,看到他们竟然用筛选法直接求每个数的因子,感觉自己太笨了,一直以为,埃勒托色尼筛选法只能筛选素数,是我对算法的理解不够深入。。。。。。。代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int f[500005]; 5 int main() 6 { 7 int i,j,t,n; 8 for(i=0;i<=500000;i++) 9 阅读全文
posted @ 2011-12-12 21:20 Misty_1 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 找规律题,其实这题想通了也很简单,就是记录1的位置,第一次时,t都等于1,然后是t=2,t=4,t=8......知道t大于了n,即1的位置到了后半部分,此时,如果1是在n+1的位置,那么它的下一次就会变成顺序的,否则就继续从前往后找,直到1在n+1的位置为止。举个例来说,n=6,1 2 3 4 5 6 | 7 8 9 10 11 12 //t=1;7 1 8 2 9 3 | 10 4 11 5 12 6 //t=2;10 7 4 1 11 8 | 5 2 12 9 6 3 //t=4;5 10 2 7 12 4 | 9 1 6 11 3 8 //t=8此时,1的位置已经到了后半部... 阅读全文
posted @ 2011-12-12 20:05 Misty_1 阅读(422) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 下一页