摘要:1 /* 2 Name: 3 Copyright: 4 Author: 5 Date: 28/04/13 21:55 6 Description: 7 刚开始做这道题的时候,第一感觉用线段树应该很容易实现,结果发现我没做过此类的线段树题目 8 然后上网看了别人的代码,才了有点思路,现总结如下: 9 这道题题意就是旅馆订房问题,由于牵扯到某一段区间的查找与运算,所以选择了线段树求解, 10 用free表示此段区间房间是否可用,lmax代表这段区间从左边起最长空闲房间数,rmax表示这段...
阅读全文
摘要:#include<stdio.h>#include<string.h>char s[30];bool flag[30];int num;__int64 jc[30]={1};void init(){ for(int i=1;i<20;i++) jc[i]=i*jc[i-1];}void solve(int n,int k){ int i,j,t,temp; if(k==0) return ; temp=jc[k-1]; t=(n)/temp; if(n%temp==0) n++; for(j=0,i=1;i<=num;i++) ...
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 char s[1000]; 4 int b[4000]; 5 int main() 6 { 7 int i,j,k,n,t,len; 8 while(~scanf("%s",s)){ 9 memset(b,0,sizeof(b)); 10 len=strlen(s);11 for(t=0,i=len-1;i>=2;i--){12 n=s[i]-'0';13 for(k=j=0;j<t||n;...
阅读全文
摘要:1 #include<stdio.h> 2 int prime[10]; //十个就够了,因为m最多有不超过10个素因子 3 long long pow(long long x,int y)//求x^y幂,用大整数 4 { 5 long long res=1; 6 while(y--) 7 res*=x; 8 return res; 9 }10 int main()11 {12 int i,j,n,m,t,tol=0;13 scanf("%d%d",&n,&m);14 t=m;15 long long re...
阅读全文
摘要:1 #include<iostream> 2 #include<cstdlib> 3 #include<stdio.h> 4 #include<string.h> 5 #define MAX 10005 6 using namespace std; 7 int cnt[MAX],num[MAX],prime[MAX]; 8 long long p[MAX]; //必须用大整数 9 void Solve(int n)10 {11 int i,j,tol=0;12 for(i=2;i*i<=n;i++)//计算素因子个数 13 {14 if(n
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int i,t,n; 6 int a[7],f[7]; 7 while(1) 8 { 9 memset(f,0,sizeof(f));10 for(n=0,i=1;i<=6;++i){11 scanf("%d",&a[i]);12 n+=a[i];13 }14 if(!n) break;15 for(...
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #define Max 0xfffffff 5 int m[610][610],p[610]; 6 bool vis[610]; 7 bool leader[610]; 8 int vexnum,arcnum; 9 void dijkstra()10 {11 int i,j,k,t,min;12 memset(vis,0,sizeof(vis));13 for(i=1;i<=vexnum;++i)14 p[i]=m[1][i]
阅读全文
摘要:1 #include<cstring> 2 #include<iostream> 3 using namespace std; 4 struct node{ 5 int x1,y1,x2,y2,color; 6 }G[15]; 7 int n,ans,deg[15];//n表区域的个数,ans存储最终结果,deg存储拓扑图中各点的入度 8 bool vis[15],m[15][15];//vis用于标记是否访问过,m表示各点之间的联系 9 void buildG()//建立拓扑图,用于确定优先级 10 {11 for(int i=0;i<n;++i)12 ...
阅读全文
摘要:1 #include<stdio.h> 2 char m[20][20]; 3 int r,c,count; 4 void cnt(int i,int j)//统计连续黑砖的块数 5 { 6 if(m[i][j]=='#'||(i<0||j<0)||(i>r-1||j>c-1))//边界条件,除去 7 return; 8 m[i][j]='#';//发现了一个新的黑砖,置'#',下次不在访问 9 count++; //count+110 cnt(i,j-1);//往左寻找 11 cnt(i-1,j);//往上寻
阅读全文
摘要:1 #include<stdio.h> 2 inline int f(int m,int n)//m代表苹果数,n代表盘子数 3 { 4 if(m==0||n==1) return 1;//当没有苹果可放时,定义为1种放法;当n=1时,所有苹果都必须放在一个盘子里,所以返回1; 5 if(n>m) return f(m,m); 6 return f(m,n-1)+f(m-n,n);//递归的两条路,第一条n会逐渐减少,终会到达出口n==1; 第二条m会逐渐减少,因为n>m时,我们会return f(m,m) 所以终会到达出口m==0. 7 8 } 9 int ma...
阅读全文
摘要:1 #include<stdio.h> 2 int modules,p[50][50]; 3 bool visit[50][50]; 4 void search(int i,int j) 5 { 6 if(visit[i][j])//已经遍历过,不再遍历 7 return; 8 visit[i][j]=1;//标志已访问 9 modules++;//块数加一 10 if(!(p[i][j]&8))//判断有没有南墙 11 search(i+1,j);12 if(!(p[i][j]&4))//判断有没有东墙 13 ...
阅读全文
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 bool anUsed[65]; 7 int L,N,stick[65]; 8 bool cmp(int a,int b) 9 {10 return a>b;11 }12 bool DFS(int nUnusedSticks,int nLeft)13 {14 int i,j,k;15 if(!(nUnusedSticks||nLe
阅读全文
摘要:1 #include<cstdio> 2 #include<iostream> 3 #define MAX 0xfffffff 4 using namespace std; 5 int m,l; 6 int Area[201][251],G[201][201],People[251],Dist[31]; 7 int Init()//初始化数据 8 { 9 int i,j,k,t;10 for(i=1;i<=l;++i)11 {12 scanf("%d",&t);13 People[t]=i;14 }15 for(i=1...
阅读全文
摘要:1 #include<stdio.h> 2 #define N 100010 3 struct node{ 4 int l,r; 5 __int64 inc,sum;//注意要定义为__int64型 6 }tree[3*N]; 7 int num[N]; 8 void build(int l,int r,int i)//建立线段树 9 {10 tree[i].l=l;11 tree[i].r=r;12 tree[i].inc=0;13 if(l==r){14 tree[i].sum=num[l];//叶子节点赋值 15 ...
阅读全文
摘要:1 #include<stdio.h> 2 #define N 8010 3 struct node{ 4 int l,r; 5 int len;//len用来存放某一段数据的个数 6 }tree[N<<1]; 7 int s[N],result[N]; 8 void build(int l,int r,int i) 9 {10 tree[i].l=l;11 tree[i].r=r;12 tree[i].len=r-l+1; 13 if(l==r) return;14 int mid=(l+r)>>1;15 build(l,m...
阅读全文
摘要:1 #include<map> 2 #include<stack> 3 #include<cctype> 4 #include<iostream> 5 using namespace std; 6 map<char,int> m; //从字符映射到数字 7 string s1,s2,r1,r2; 8 string transform(string s)//把表达式转化为后缀表达式方便计算 9 {10 int i,j,len;11 char c[81];12 stack<char> exp; //定义一个字符栈,存放运算符
阅读全文
摘要:Accepted360K16MSG++700B 1 #include<stdio.h> 2 #include<string.h> 3 char fs[100][71],bs[100][71]; 4 int ftop,btop; 5 int main() 6 { 7 char a[8],cur[71]; 8 strcpy(cur,"http://www.acm.org/"); 9 while(scanf("%s",a),strcmp(a,"QUIT")){10 if(!strcmp(a,"VISIT&q
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char c,p[26]; 6 int n,curnum,leave; 7 while(scanf("%d%*c",&n),n) 8 { 9 curnum=leave=0;10 memset(p,0,sizeof(p));11 for(c=getchar();c!='\n';c=getchar()){12 if(p[c-'A']==1){13 ...
阅读全文
摘要:1 #include<stdio.h> 2 struct Node{ //定义堆栈 3 int w,h; //w为目前为止整个区域的宽度,h为当前矩形的高度 4 }stack[50001]; 5 int main() 6 { 7 int i,n,top,totalw; //top为栈顶指针,totalw为总的宽度 8 int curw,curh,maxsize; //curw,curh为新矩形高度,宽度。maxsize为当前最大矩形面积 9 while(scanf("%d",&n),n+1)10 {11 for(totalw=...
阅读全文
摘要:1 #include<stdio.h> 2 #include<string.h> 3 char s[30001],str[30001]; 4 int main() 5 { 6 int i,k,len; 7 while(gets(str)) 8 strcat(s,str); 9 len=strlen(s);10 for(k=0,i=2;i<=len;++i)11 k=(k+1999)%i;12 if(s[k]=='?') printf("Yes\n");13 else if(s[k]==' ') printf(&q
阅读全文