zoj
马冬冬
手艺人
展开
-
zoj1037
这道题把规律找出来后难度还行。主要分width*length的奇偶。当为偶数时,可以一步不重复地走完,当为奇数时,就要用平方根了。#include#includeint main(){ float num; int n; int width,length; int count=0; scanf("%d",&n); while(n) {原创 2012-03-03 17:14:35 · 436 阅读 · 0 评论 -
zoj1411
要学的东西还有太多太多。回溯+剪枝。#include #include #include #include #include #include using namespace std; bool IsValid(int index, int s, bool map[][40], int size) {原创 2012-03-05 10:27:02 · 367 阅读 · 0 评论 -
zoj1006
题目中给出的是已知明码求密码的公式,要求编已知密码求明码的算法。字符转换成数字就不多说了,关键是那个公式。首先需要考虑每个密码字符所对应的明码字符以及所处的位置。注意,尽管公式中有mod28,但是逆求回去的话数字不可能大于27.然后再求位置就可以了。#include#include#include#includeint k,N;char plain[71];char cip原创 2012-03-04 09:25:03 · 453 阅读 · 0 评论 -
zoj1152
唉,又一次在Presentation上花了好长时间 #include#include#include#includeint n,m,N;int main(){ int count; int num; int i,j; scanf("%d",&N); while(N--) { count=num=0; scanf原创 2012-03-05 21:37:30 · 283 阅读 · 0 评论 -
zoj2095
#includeint main(){ int a[500001]={0}; int i,j; for(i=1;i<=250000;i++) { for(j=2;i*j<=500000;j++) { a[i*j]+=i; } } while(scanf("%d",&i)!=EOF) { wh原创 2012-03-05 22:20:23 · 411 阅读 · 0 评论 -
zoj1797
啥都不说了,做了这么些acm题,头一次这么顺地ac,确实这道题有点简单,就当练手了吧。#include#include#include#includeint gcd(int m,int n){ int swap; while(n!=0) { swap=n; n=m%n; m=swap; } return m;原创 2012-03-06 22:47:10 · 294 阅读 · 0 评论 -
zoj1712
现在做简单题已经基本可以对准思路了,接下来就应该着重研究acm的各种算法了,真正的困难来了,做好好几天都做不出来一道题的准备吧。#include#include#include#includechar sk[40];long sum;int main(){ int n; int i; int count=2; scanf("%s",sk);原创 2012-03-06 23:17:18 · 258 阅读 · 0 评论 -
zoj1889
还是惰性在作怪,这道题居然是从网上找的答案,得多思考啊#include<stdio.h>int main(){ int n,i,k; while(scanf("%d",&n)!=EOF) { if(n==1) printf("%d\n",n); else {...原创 2012-03-08 23:11:21 · 215 阅读 · 0 评论 -
zoj1879
没啥说的#include#include#include#includeint N;int main(){ int dif[3001]; int a,b,i; int flag; while(scanf("%d",&N)==1) { for(i=0;i<3000;i++) { dif[i]=0;原创 2012-03-08 23:26:28 · 233 阅读 · 0 评论 -
zoj1526
心情不好#include#include#include#includeint main(){ int n,num,i; double ans; scanf("%d",&n); while(n--) { ans=1; scanf("%d",&num); for(i=1;i<=num;i++) {原创 2012-03-10 10:07:19 · 239 阅读 · 0 评论 -
zoj1715
没啥好说的#include#include#include#includeint N,Q;int num[104];int main(){ int m,x,i,j; int max,maxi; while((scanf("%d%d",&N,&Q)==2)&&((N!=0)||(Q!=0))) { memset(num,0,siz原创 2012-03-10 11:06:40 · 272 阅读 · 0 评论 -
zoj1569
其实计算机专业拼到最后拼的是数学,就像这道题。这道题目如果就用普通的方法来做的话,复杂度会达到o(n^2),显然会超时,现在的目的是改进算法,使时间复杂度将到o(n),注意题目中有个很重要的条件:就是求和的数是相邻的,第一反应就是考虑求1----k项的和,然后对m取余,如果第i项的余数和第j项的余数相等,则从i到j的和就能被m整除,当然别忘了考虑0这个特殊的数。根据组合公式,显然count原创 2012-03-09 22:11:55 · 463 阅读 · 0 评论 -
zoj1582
无语了,看了别人的代码之后,感觉自己可傻。如果自己在认真想想,会不会想出来呢?#include#include#include#includeint main(){ int c,t; int i,j=0,flag=0,x; char correct[100],tony[100]; int ncases,time; scanf("%d",&n原创 2012-03-09 23:01:42 · 309 阅读 · 0 评论 -
zoj1730
举个例子吧,比如1,2,3,4,最后的结果为2,1,4,3,再比如1,2,3,4,5,最后结果为3,2,1,5,4,其实就是等差数列的求和,奇偶分别对待 #include#include#include#includeint N;int n;int main(){ scanf("%d",&N); while(N--) { sc原创 2012-03-10 10:32:24 · 195 阅读 · 0 评论 -
zoj1049
没啥说的#include#define pi 3.14159int main(){ long n,i,t; float x,y; scanf("%ld", &n); for (i=1;i<=n;i++) { scanf("%f%f",&x,&y); for (t=1; t < pi * (x *原创 2012-03-29 16:51:04 · 295 阅读 · 0 评论 -
zoj1045
没啥说的#includeint main(){ float a,b,sum; int i; while(scanf("%f",&a)==1) { b=2; sum=0; if(a==0) break; else { for(i=1;i<500;i++) {原创 2012-03-29 16:46:50 · 379 阅读 · 0 评论 -
zoj1755
没啥说的#include int main(){ int array[16]; int i,j,n,count; scanf("%d",&array[0]); while(array[0]!=-1) { i=0; while(array[i]!=0) { scanf("%d",&array[++i]); }原创 2012-03-29 16:56:12 · 247 阅读 · 0 评论 -
zoj1048
没啥说的#includeint main(){ int i; float a[12],sum=0,ave; for(i=0;i<12;i++) { scanf("%f",&a[i]); sum=sum+a[i]; } ave=sum/12; printf("$%.2f",ave); return 0;}原创 2012-03-29 16:44:53 · 197 阅读 · 0 评论 -
zoj2818
没啥说的#include#includeint main(){ int b,n,c; double a,p,q; while(scanf("%d%d",&b,&n)!=EOF) { if(n==0&&b==0) return 0; a=pow(b,1.0/n); c=(int)a;原创 2012-03-29 16:49:40 · 291 阅读 · 0 评论 -
zoj1760
没啥说的#include int main(){ int array[16]; int i,j,n,count; scanf("%d",&array[0]); while(array[0]!=-1) { i=0; while(array[i]!=0) { scanf("%d",&array[++i]); }原创 2012-03-29 16:53:39 · 523 阅读 · 0 评论 -
zoj1073
还行,只是有个坎儿,就是对比的时候。#include#includeint main(){ char input[61]; int value[61]; int length,i,j,k,mul; int result[65]; int flag; int a; while(scanf("%s",input)!=EOF){ length=原创 2012-03-31 22:33:42 · 275 阅读 · 0 评论 -
zoj1027
解析思路:状态转移方程b[i][j]=max(b[i-1][j-1]+t[i][j],b[i][j-1]+t[4][j],b[i-1][j]+t[i][4]);i表示第一个字符串位子,j表示第二个字符串的位子;b[i][j]表示1到i,1到j位子的值#include#include#include#includeint t[5][5]={{5,-1,-2,-1,-3},{-原创 2012-03-14 22:06:49 · 337 阅读 · 0 评论 -
zoj1666
好痛苦啊!做的题也有一定数目了,可是好像是各个散落的点一样,找不到一条线把他们连起来。这道题的思路想到了,可就是中间的那个for循环想不出来。要注重抽象的本质东西,还要总结思路 #include#include#include#includeint main(){ int n; int dp[300]; int c[20]; int i,k;原创 2012-03-31 21:07:21 · 299 阅读 · 0 评论 -
zoj1076
思路就是求每一个exon前面最多有几个符合条件的exons,思路其实不算难,难的是怎么实现。这道题是copy人家的,用了结构体和单链表,看来还是得虚心学习才行。#include#include#include#include#include#includeusing namespace std;typedef struct{ int n,head,ta原创 2012-03-17 13:02:07 · 308 阅读 · 0 评论 -
zoj1457
主要是个剪枝,相邻两个数必须是一奇一偶,所以如果是奇数个的话,根本不用考虑,否则会TLE的。其他的思路很简单,但是实现起来。。。唉。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int A[20],visit[20],ok,n;int is...原创 2012-04-04 10:08:20 · 312 阅读 · 0 评论 -
zoj1268
有时候感觉zoj有点苛刻,一点错误都不能有。可能还是没有把握住出题脉络吧题目难度还行,主要就是看每对点的第二个数是否出现2次或以上。#includeint main(){ int parent[1000],i,a,b,num=1,max,flag; while(scanf("%d%d",&a,&b)&&(a+b>=0)) { if(a==0&原创 2012-04-05 17:34:18 · 282 阅读 · 0 评论 -
zoj1648
不知道怎么判断两条线段相交,学习学习吧#include #include #include #include #include #include #include #include #include using namespace std; const double eps = 0.00; t转载 2012-04-07 11:47:11 · 319 阅读 · 0 评论 -
zoj1905
小媛姐的代码#include#include#include#includechar str[1000005];int len;int cmp(int pos){ int i=pos,k; while(i<len) { for(k=0;k<pos;k++) { if(str[i]==str[k])转载 2012-04-09 09:38:53 · 242 阅读 · 0 评论 -
zoj1360||poj1328
程序没有大概,目标是完全理解某一种算法,比如这道题的快排算法,继续努力吧#include#include#include#includeint n,d;double pl[1005],pr[1005];void kp(int L,int R){ double m1=pl[L+R>>1],m2=pr[L+R>>1]; int i=L,j=R; d原创 2012-04-30 10:40:52 · 320 阅读 · 0 评论 -
zoj1074
经典DP#include#include#include#includeint DP(int a[], int n){ int i, f[101]; int max = -200000000; for(i=2,f[1]=a[1]; i<=n; i++) { if(f[i-1]>0) f[i] = f[i-1] + a[i]; else原创 2014-04-16 19:10:08 · 666 阅读 · 0 评论 -
zoj1088
约瑟夫环问题原创 2014-04-16 19:19:19 · 423 阅读 · 0 评论 -
zoj1090
三角形外心的模板原创 2014-04-16 19:23:43 · 395 阅读 · 0 评论 -
zoj1091
广度优先搜索#include #include typedef struct{ int a, b, cnt;}POINT;POINT stack[1000];int reachable(int x, int y){ if(x >= 0 && x = 0 && y <= 7) return 1; return 0;}int main(void){ char原创 2014-04-16 19:25:06 · 1151 阅读 · 0 评论 -
zoj1010
关于数学图形处理的问题#include#includeusing namespace std;double det(double x1,double y1,double x2,double y2,double x3,double y3){ return x1*y2+x2*y3+x3*y1-x2*y1-x3*y2-x1*y3;}int main(){ int n,i,j原创 2014-04-16 18:36:11 · 657 阅读 · 0 评论 -
zoj1062
递归类题目#include#includeusing namespace std;#define MAXNODE 19int A[MAXNODE],B[MAXNODE];string tree(int node,int index){ string s("X"); int i=0,j=node-1; for(;i<node;i++,j--) { int原创 2014-04-16 19:06:59 · 540 阅读 · 0 评论 -
zoj1082
最短路径问题#include#include#include#includeusing namespace std;int map[110][110];int dist[110];bool flag[110];int dijkstra(int start,int n){ int i,j,mark,mini,maxi; memset(dist,0,sizeof(dis原创 2014-04-16 19:16:03 · 359 阅读 · 0 评论 -
zoj1083
拓扑排序题#include#includeusing namespace std;int n,m;char pic[30][30];int in[26];bool map[30][30];struct { int ax,ay,bx,by;}frame[26];int FrameCnt;bool choosed[26];char ans[26];void原创 2014-04-16 19:18:01 · 1087 阅读 · 0 评论 -
zoj1081
判断点是否在多边形内部原创 2014-04-16 19:13:41 · 404 阅读 · 0 评论 -
zoj1008
搜索类题目#includetypedef struct{ int up,right,down,left; int amount;}SQ;SQ SQUARE[25],KIND[25],tempSQUARE[25];int N,AMOUNT,COLOR[25],JUMP,kindAMOUNT,TOP;int switchSQUARE(int k){ return SQ原创 2014-04-16 18:32:29 · 396 阅读 · 0 评论 -
zoj1013
经典DP题目#include #define MAXCARAVAN 100 #define MAXEQUIPMENT 500 #define HELM 0 #define ARMOR 1 #define BOOT 2 struct/* 单装 */ { int weight, size, capability; }EQUIPMENT[3]; str原创 2014-04-16 18:49:53 · 456 阅读 · 0 评论