04 2012 档案

摘要:#include <stdio.h>#include <math.h>#include <string.h>int r;int abs(int a){ if(a<0) return -a; return a;}int judge(int a,int b){ int k=abs((r-a)*(r-a)+(r-b)*(r-b)-r*r); if(k<=3) return 1; else return 0;}int main(){ int t,i,j,u=1; scanf("%d",&t); while(t--) { sca 阅读全文
posted @ 2012-04-28 23:25 shijiwomen 阅读(271) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <stdlib.h>struct node{ int c; int d;}nodes[100010];int cmp(const void * a,const void * b){ return (*(node *)a).d-(*(node *)b).d;}int main(){ int t,n,i,k=1; __int64 max,sum; scanf("%d",&t); while(t--) { max=0; sum=0; scanf("%d",&n); f 阅读全文
posted @ 2012-04-27 21:13 shijiwomen 阅读(190) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <malloc.h>int n,m,c;struct node{ int data; struct node * next;};void InitList(node * H){ H=(node *)malloc(sizeof(node)); H->next=NULL;}void CreateFromHead(node * H){ node *s; node *r; r=H; for(int i=1;i<=n;i++) { s=(node *)malloc(sizeof(node)); s->data 阅读全文
posted @ 2012-04-27 20:40 shijiwomen 阅读(262) 评论(0) 推荐(0)
摘要:从后往前#include <stdio.h>int abs(int s){ if(s<0) return -s; return s;}int main(){ int t,n,i,j,a[1010],sum,min,k=1; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); min=abs(a[1]); //printf("%d\n",min); for(i 阅读全文
posted @ 2012-04-25 22:08 shijiwomen 阅读(1213) 评论(1) 推荐(0)
摘要:有两个模板 注意模板使用时的数据改变#include <iostream>#include<cstdio>#include<cstdlib>#include<string.h>#define MAX_VOLUMN 100001#define MAX_N 11#define max(a,b) ((a)>(b) ? (a) : (b))using namespace std;int vol, n; // 背包容量 ;数量int cv[MAX_VOLUMN], num[MAX_VOLUMN], f[MAX_VOL... 阅读全文
posted @ 2012-04-19 09:16 shijiwomen 阅读(552) 评论(0) 推荐(0)
摘要:#include <stdio.h>#define abs(a) ((a)<0?-(a):(a))__int64 gcd(__int64 a,__int64 b){ return !b?a:gcd(b,a%b);}void exgcd(__int64 i,__int64 j,__int64 &a,__int64 &b){ if(!j) a=1,b=0; else exgcd(j,i%j,b,a),b-=(a*(i/j));}int main(){ __int64 x,y,n,m,l; while(scanf("%I64d %I64d %I64d %I 阅读全文
posted @ 2012-04-18 10:39 shijiwomen 阅读(347) 评论(0) 推荐(0)
摘要:#include <stdio.h>#include <string.h>#define M 1000char b[M],c[M];int a[M][M];int main(){ int i,j,n,m; while(scanf("%s%s",b+1,c+1)!=EOF) { n=strlen(b+1); m=strlen(c+1); for(i=0;i<=n;i++) a[i][0]=0; for(i=0;i<=m;i++) a[0][i]=0... 阅读全文
posted @ 2012-04-18 09:34 shijiwomen 阅读(158) 评论(0) 推荐(0)
摘要:刚开始做时思路过于局限,只考虑局部的递推,没有全局观导致,越推越复杂,最后看到网上答案,精髓啊#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int max3(int a,int b,int c){ a = a>b?a:b; a = a>c?a:c; return a;}int max2(int a,int b){ a = a>b?a:b; return a;}int t[100001][11];int main(){ int n,T,x 阅读全文
posted @ 2012-04-18 09:24 shijiwomen 阅读(199) 评论(0) 推荐(0)
摘要:#include <stdio.h>int main(){ int n,a[1010],i,j,max,b[1010]; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) { scanf("%d",&a[i]); b[i]=a[i]; } max=a[1]; for(i=2;i<=n;i++) { for(j=1;j<i;j++) { if(a[i]>a[j]&&b[i]<a[i]+b[j]) b[i]=a[i]+b[j]; } if(b[i] 阅读全文
posted @ 2012-04-17 17:26 shijiwomen 阅读(197) 评论(0) 推荐(0)
摘要:染色插入算法procedure Insert(p, l, r, a, b, c: Integer);var m: Integer;begin if Tree[p].cover <> c then begin m := (l + r) div 2; if (a = l) and (b = r) then Tree[p].cover := c else begin if Tree[p].cover >= 0 then begin Tree[p * 2].cover := Tree[p].cover; Tree[p * 2 + 1].cover := Tree[p].cover; 阅读全文
posted @ 2012-04-17 16:45 shijiwomen 阅读(364) 评论(0) 推荐(0)
摘要:其中的标志s用的很妙,非常精髓,标记是否是纯色,单色,是否往下递归,计算单色数据#include <iostream>#include <cstdio>using namespace std;const int MAXN=2000000;int n,m,a[MAXN+5],ans;struct tree{ int l,r; int s;}trees[MAXN*2];int max(int k,int l){ return k>l?k:l;}void buildtree(int rs,int l,int r){ //printf("%d %d %d\n&q 阅读全文
posted @ 2012-04-17 15:37 shijiwomen 阅读(212) 评论(0) 推荐(0)
摘要:#include <iostream>#include <cstdio>using namespace std;const int MAXN=2000000;int n,m,a[MAXN+5];struct tree{ int l,r; int v;}trees[MAXN*2];int max(int k,int l){ return k>l?k:l;}void buildtree(int rs,int l,int r){ //printf("%d %d %d\n",rs,l,r); trees[rs].l=l; trees[rs].r=r; 阅读全文
posted @ 2012-04-17 11:50 shijiwomen 阅读(201) 评论(0) 推荐(0)
摘要://#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>//using namespace std;const int MAXN=10000;struct ele{ int inte; int weit; int num;}eles[MAXN];int cmp(const void *a,const void *b){ struct ele t=*(struct ele *)a; struct ele l=*(struct ele *)b; if(t 阅读全文
posted @ 2012-04-15 19:49 shijiwomen 阅读(179) 评论(0) 推荐(0)
摘要:#include <stdio.h>int main(){ int m,k; int t,s=0; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&k); printf("Case #%d: %.8lf\n",++s,(double)1/(k+k*m+1)); } return 0;} 概率题 要分清合法和不和法的边界,再去求这题很明显,如果这个序列合法,则他的任意一个序列的循环移动都是不合法的 阅读全文
posted @ 2012-04-14 10:59 shijiwomen 阅读(244) 评论(0) 推荐(0)
摘要:n个数,+、-、.号等于0的等式 输出等式和总过的等式#include <iostream>#include <cstdio>#include <string.h>using namespace std;const int MAXN=20;const int MAXM=16;char str[MAXM],opt[MAXN][MAXM];int n,cnt;void dfs(int deep,int num,int pre){ int now,k; if(deep==n) { str[n]='\0'; if(num==0) { if(cnt&l 阅读全文
posted @ 2012-04-13 23:28 shijiwomen 阅读(332) 评论(0) 推荐(0)
摘要:注意__int64的设定,关键#include <stdio.h>int main(){ int n,t,s,c; int i,a,b; __int64 sum; int k=1; scanf("%d",&c); while(c--) { scanf("%d%d%d",&n,&t,&s); sum=2*t+s; scanf("%d",&a); for(i=2;i<=n;i++) { scanf("%d",&b); if((b-a)*s>2*t) 阅读全文
posted @ 2012-04-13 10:52 shijiwomen 阅读(282) 评论(0) 推荐(0)
摘要:import java.util.*;import java.math.BigInteger;public class Main{ /** * @param args */ public static BigInteger jc(BigInteger m) { BigInteger i; BigInteger st=new BigInteger("1"); BigInteger t=new BigInteger("1"); for(i=m;i.compareTo(B... 阅读全文
posted @ 2012-04-13 10:17 shijiwomen 阅读(297) 评论(0) 推荐(0)
摘要:注意转头方程#include <stdio.h>#include <string.h>int max(int a,int b){ return a>b?a:b;}int main(){ int t; int n,m; int i,j; int w[30],c[30]; int dp[30001]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=m;i++) scanf("%d%d",&w[i] 阅读全文
posted @ 2012-04-12 11:02 shijiwomen 阅读(335) 评论(0) 推荐(0)
摘要:#include<iostream>#include <cstdio>#include <string.h>using namespace std;int n,m;int c[201][201];int maxflow(int s,int t){ int p,q,queue[201],u,v,pre[201]; int flow,aug; flow=0; while(true) { memset(pre,-1,sizeof(pre)); for(queue[p=q=0]=s;p<=q;p++) { u... 阅读全文
posted @ 2012-04-10 08:24 shijiwomen 阅读(221) 评论(0) 推荐(0)
摘要:#include <iostream>#include <string.h>using namespace std; #include <queue>#define min(x,y) (x<y?x:y)const int inf = 1000000000;const int maxn = 210;int cap[maxn][maxn];int n,m;int s,t;int flow[maxn][maxn],d[maxn],parent[maxn],maxflow; void Edmonds_Karp(int s,int t,int nnum){ ma 阅读全文
posted @ 2012-04-10 08:18 shijiwomen 阅读(193) 评论(0) 推荐(0)
摘要:我再网上摘的#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;#define N 300int m;int Visited[N];int Prev[N];int G[N][N];unsigned EKmin(){ deque<int> q; memset(Visited,0,sizeof(Visited)); memset(Prev,0,sizeof(Prev)); Prev[1]=0; Visited[1 阅读全文
posted @ 2012-04-09 20:41 shijiwomen 阅读(543) 评论(0) 推荐(0)
摘要:我纠结了四天的网络流,看疯了各种网络流的基础课件,各种参考书,看的是云里雾里最后还是做题一点不懂,最后一个模板解决问题,神啊这里体现了模板的强大力量#include <stdio.h>#include <string.h>const int maxn=150000;const int maxm=200000;const int inf=1<<30;struct edge{ int from,to,val,next;}map[maxn];int vis[maxn],que[maxn],dist[maxn],len;void init(){ len=0; mem 阅读全文
posted @ 2012-04-09 19:50 shijiwomen 阅读(303) 评论(0) 推荐(0)
摘要:一做这题,才感觉我一直没有真正的理解dfs,dfs其实就是一种枚举,一种靠递归,靠剪枝优化的枚举而且能根据具体问题进行剪枝,和递归的条件,看来我还得更深刻地去理解一前的算法,这很重要还有就是vis[]是否访问数组标识,其实就是一个区分,区分成两组,这是实质#include <stdio.h>#include <string.h>#define node 25int dividen[node];int c[node][node];int n,max;void dfs(int num,int t){ int i,data=t; dividen[num]=1; for(i=1 阅读全文
posted @ 2012-04-08 10:58 shijiwomen 阅读(748) 评论(0) 推荐(0)
摘要:主要是printf("%*c",n,c);的应用,就是c这个字符要占都少个位置#include <stdio.h>int main(void){ char c; int i = 0, n; while ((c = getchar()) != '@') { scanf("%d%*c", &n); printf(i ? "\n%*c\n" : "%*c\n", n, c); if (n == 1) { i = 1; continue; } for... 阅读全文
posted @ 2012-04-08 08:49 shijiwomen 阅读(205) 评论(0) 推荐(0)
摘要:其中非常巧妙的运用了b和c变量,还有就是有效地剪枝#include <stdio.h>int A(int n){ int i = 1; while (n) { if (n % 10 == 4 || n % 100 == 62) return i; n /= 10; i *= 10; } return 0;}int main(void){ int n, m, i, c, b; int *a = new int[1000000]; a[0] = 0; for (c = 0,i = ... 阅读全文
posted @ 2012-04-08 08:35 shijiwomen 阅读(222) 评论(0) 推荐(0)
摘要:f[i]=min(f[i],num-strlen(word)+f[i+num])注意数组范围match非常巧妙的运用了j与i的匹配dp两层循环加一个函数(计算距离)#include <stdio.h>#include <string.h>#define maxn 605#define maxl 305int n,m;char str[maxl],map[maxn][maxl];int f[maxl];int min(int k,int t){ return k>t?t:k;}int match(char *st1, char *st2){ if (st1[0] ! 阅读全文
posted @ 2012-04-06 16:17 shijiwomen 阅读(128) 评论(0) 推荐(0)
摘要:做的第一个字典树,非常直观第一类是求前缀有多少个,第二类是求前缀是否在一串字符中出现主要是字典树的构造,使用了一个嵌套的结构体,使用了指针,非常方便也非常巧妙,还有就是root,newnode必须初始空间bananabandbeeabsoluteacmbabbandabc#include <stdio.h>#include <string.h>#include <malloc.h>struct dictree{ dictree *child[26]; int n;};struct dictree *root;void insert(char *str){ s 阅读全文
posted @ 2012-04-06 15:27 shijiwomen 阅读(223) 评论(0) 推荐(0)
摘要:其中巧妙的运用了优先队列,将哈夫曼树的精髓给表达了出来需要注意的是其中的优先队列的定义,一定要有自定义比较#include <iostream>#include <cstdio>#include <queue>using namespace std;struct node{ __int64 value; bool operator <(const node &a)const { return value>a.value; }}temper;int main(){ priority_queue<node> qu; int i,n 阅读全文
posted @ 2012-04-06 11:26 shijiwomen 阅读(227) 评论(0) 推荐(0)
摘要:注意问题的转换,有环,无序,有序,还有他们的包含分界点其中将字母装换成数字节点很妙#include <stdio.h>#include <string.h>int map[27][27],indegree[27],q[27];int n,m;int topsort(){ int i,num,flag,j,start; int temp[27],c; c=0; flag=1; for(i=1;i<=n;i++) temp[i]=indegree[i]; for(i=1;i<=n;i++) { num=0; for(j=1;j<=n;j++) { if(t 阅读全文
posted @ 2012-04-06 10:11 shijiwomen 阅读(188) 评论(0) 推荐(0)
摘要:就是不断选择最小的 不断更新最短距离,本题要注重问题的转换4aaaaaaabaaaaaaabaaaaaaabaaaa0#include <stdio.h>#define MAX 2005int vis[MAX];int distans[MAX];char str[MAX][7];int n;int sum,min;int dist(char *str1,char *str2){ int d,i; for(i=0,d=0;i<7;i++) { if(str1[i]!=str2[i]) d++; } return d;}int prim(){ int i,v,j; sum=0; 阅读全文
posted @ 2012-04-06 09:25 shijiwomen 阅读(147) 评论(0) 推荐(0)
摘要:注意平角,钝角的判定,其中主要是s=0.5*sin@*a*b 公式的运用21 1 2 21 1 1 0#include <stdio.h>#include <math.h>int main(){ double x1,y1,x2,y2,s,len1,len2,k; int t; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); s=fabs(x1*y2-y1*x2); len1=sqrt(x1*x1+y1*y 阅读全文
posted @ 2012-04-06 08:51 shijiwomen 阅读(339) 评论(0) 推荐(0)
摘要:#include<stdio.h>#include<cmath>int main(){ double n,p; while(scanf("%lf%lf",&n,&p)!=EOF) { printf("%.0f\n",pow(p,1/n)); } return 0; } 阅读全文
posted @ 2012-04-05 10:29 shijiwomen 阅读(181) 评论(0) 推荐(0)
摘要:一般是BFS(DFS)+hash,每一个状态化成一个01组成的hash数字,作为状态转移,直到目标状态,这是很妙的一个转换,一般还会配置一个结构体记录状态,这也很关键 阅读全文
posted @ 2012-04-05 08:53 shijiwomen 阅读(146) 评论(0) 推荐(0)
摘要:kmp是从最初的字符串匹配算法优化而来的,其中就是多了一个函数值函数,记录最后的匹配的,从而得到优化,有回溯的感觉。只是对kmp的函数值函数求法有的不理解#include <iostream>#include <cstdio>#include <string.h>using namespace std;int n[1000];char str1[1000];char str2[1000];int sum;void kmp(char *p,int next[]){ int i; int j=0; int k=-1; next[0]=-1; while(p[j] 阅读全文
posted @ 2012-04-04 19:04 shijiwomen 阅读(285) 评论(0) 推荐(0)
摘要:我晕了,其中的逻辑没理解,从里面转不出来,不知为啥为防止遗忘,记忆函数值的计算,见百度#include <stdio.h>void kmp(char *p,int next[]){ int i; int j=0; int k=-1; next[0]=-1; while(p[j]!='\0') { if(k==-1||p[j]==p[k]) { j++; k++; if(p[j]!=p[k]) next[j]=k; else next[j]=next[k]; }else { k=next[k]; } } for(i=0;i<j;i++) print... 阅读全文
posted @ 2012-04-04 11:20 shijiwomen 阅读(174) 评论(0) 推荐(0)
摘要:以前总是,得一行打印一行,现在可以将全部存储以后,再一次性输出,很好的方法还有就是行数的奇偶控制,很有效。找出n与,a,b的规律#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n;char a[81][81];void eva(int x, char c){ int i = x; int j = x; if(2*x>n) a[i][j]=c; else { for(;j... 阅读全文
posted @ 2012-04-04 10:20 shijiwomen 阅读(226) 评论(0) 推荐(0)
摘要:本题用了打表的形式,求出了1000内的sg值,非常直接参考代码(http://www.cnblogs.com/lzsz1212/archive/2012/01/06/2315337.html)# include <stdio.h># include <string.h>int sg[10010] ;int k, knum[110] ;int flag[110] ;int met(int n){ int i, ans = 0 ; memset (flag, 0, sizeof(flag)) ; for (i = 0 ; i < k ; i++) if (n - k. 阅读全文
posted @ 2012-04-03 12:03 shijiwomen 阅读(239) 评论(0) 推荐(0)
摘要:非常巧妙的运用了m^m=0的情况,妙啊35 7 90参考代码(http://www.cnblogs.com/lzsz1212/archive/2012/01/06/2315324.html)# include <stdio.h>int a[110] ;int main (){ int i, n, k, ans ; while (~scanf ("%d", &n) && n) { k = 0 ; for (i = 0 ; i < n ; i++) { scanf ("%d", &a[i]) ; ... 阅读全文
posted @ 2012-04-03 11:27 shijiwomen 阅读(222) 评论(0) 推荐(0)
摘要:我一开始开了一个2000*2000的数组一直mte,后来发现,这个pn状态图有规律,才ac,这就有了一个启示,如果题目数据量大,我们需要考虑一下这题的数据是否有规律 阅读全文
posted @ 2012-04-03 10:55 shijiwomen 阅读(173) 评论(0) 推荐(0)
摘要:格式控制那块,用cin输入,输出的时候有问题,但不知道为什么能过不知道是不是我理解错了#include <cstdio>#include <iostream>using namespace std;char a[102][102];int n,m;int add(int q,int p){ int mines=0; if(a[q][p]=='*') return -1; if(q-1>=0&&a[q-1][p]=='*')mines++; if(q-1>=0&&p-1>=0&&am 阅读全文
posted @ 2012-04-02 17:20 shijiwomen 阅读(183) 评论(0) 推荐(0)
摘要:注意 题意输入的循序不能变 还有就是设置一个变量数组 记忆优化#include <stdio.h>#define INF 10000000int rem[INF]={0},max,sum;int main(){ int n,a,b,i,f,s,o; rem[1]=1; while(scanf("%d%d",&a,&b)!=EOF) { max=-1; s=a; o=b; if(a>b) { a=o; b=s; } for(i=a;i<=b;i++) { n=i; sum=1; //printf("fz:%d %d %d %d 阅读全文
posted @ 2012-04-01 21:17 shijiwomen 阅读(164) 评论(0) 推荐(0)
摘要:越来越感觉算法就是一种方法,一个解决一类问题的公式,当然公式有变形,题也有变形但只要深刻理解它,变形只是一种顺理而成,只要类比公式,推理一下,将代码变形一下#include <stdio.h>#include <string.h>#define MAX 50005struct trea{ int l,r; int summ;}trees[MAX*3];int num[MAX],n,t;void biuld(int i,int l,int r){ trees[i].l=l; trees[i].r=r; if(l==r) { trees[i].summ=num[l-1]; 阅读全文
posted @ 2012-04-01 18:49 shijiwomen 阅读(246) 评论(0) 推荐(1)
摘要:真的很气愤,这题的限制条件有严格控制,代码中体现,我都无语了#include <stdio.h>#include <stdlib.h>int a[260][101],b[260][101];//第二维数组为硬币数 int main(){ int i,j,k,l,n,sum; int c[5]={1,5,10,25,50}; for(i=0;i<=260;i++) for(j=0;j<=101;j++) { a[i][j]=0;b[i][j]=0; } for(i=0;i<=100;i++)//用面值为1的硬币组成价值为i(不超过100) { b[i][ 阅读全文
posted @ 2012-04-01 14:18 shijiwomen 阅读(550) 评论(0) 推荐(0)
摘要:递推式的时候一定要注意+号m+=m+n,左边的加号加不加我查了半天啊#include<stdio.h> #include<iostream> #include<string.h> #include<stdlib.h> #include<queue> #include<set> #include<stack>#include <fstream> using namespace std;#define max 8000003struct node{ char state[3][3]; int x,y; 阅读全文
posted @ 2012-04-01 08:55 shijiwomen 阅读(320) 评论(0) 推荐(0)