摘要: //252K 16MS注意隔板不按顺序给出#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;int n,m;double x1,y1,x2,y2;struct point{ double x; double y;};struct T{ point a; point b;//a点在b点上方}line[5500];int res[5500];point temp;bool check(point p,T lin)//判 阅读全文
posted @ 2012-07-16 09:27 willzhang 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 360K 172MS二分法和叉积代码如下#include<stdio.h>#include<string.h>#include<stdlib.h>int n,m;double x1,y1,x2,y2;struct point{ double x; double y;};struct T{ point a; point b;//a点在b点上方}line[5500];int res[5500];point temp;bool check(point p,T lin)//判断p点在lin的左方返回true,在lin的右方返回false{ double cc=(li 阅读全文
posted @ 2012-07-15 22:05 willzhang 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 不断添加圆,维护最小圆。如果添加的点i在圆内,不动,否则: 问题转化为求1~I的最小圆:求出1与I的最小圆,并且扫描j=2~(I-1),维护(1)+(i)+(2~j)的最小圆,如果找到J不在最小圆内,问题转化为:求(1~J)+(i)的最小圆。求出I与J的最小圆,继续扫描K=1~(j-1),找到不在最小圆内的,求出I J K三者最小圆,此时找到了(1~j)+(i)的最小圆,可以回到上一步(三点定一圆,所以1~(J-1)一定都在求出的最小圆上)。 这个做法复杂度是O(n)的,当加入圆的顺序随机时,因为三点定一圆,所以不在圆内概率是3/i,求出期望可得是On.以上是百度文库的内容,自己做了些删改以下 阅读全文
posted @ 2012-07-15 11:18 willzhang 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 这题WA很久,本人还随机了100个样例来测试,结果全过(白浪费我一个小时)然后看了讨论区,就用C++提交了一遍,,于是,,过了,大家记得用C++交一遍输出的时候注意G++对%f和%lf的区别,,,,据说是这样(大神轻拍)#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<algorithm>using namespace std;#define station 1#define agent 2#define MAX 100010co 阅读全文
posted @ 2012-07-14 17:00 willzhang 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 第一次做计算几何,看了算法导论的算法,再看了网上的一些代码,发现很多实际上并没有完整地实现分治法,然后试图自己实现失败告终T_T于是有了如下代码,分治法的思想详见算法导论与编程之美耗时是1250ms#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#define MAX 100010struct point{ double x; double y;};double D_MAX=99999999999; point X[MAX];point Y[MAX];dou 阅读全文
posted @ 2012-07-14 11:12 willzhang 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 经典稳定婚姻问题“稳定婚姻问题(The Stable Marriage Problem)”大致说的就是100个GG和100个MM按照自己的喜欢程度给所有异性打分排序。每个帅哥都凭自己好恶给每个MM打分:我最爱a,其次爱b,再次爱c...每个帅哥打的分不同,你最爱的可能是我最讨厌的我最爱的可能是他不甚喜欢的。同样,每个美女也同样给每个帅哥打分。现在需要给他们搭配出100对新郎新娘,并且要保证所得到是稳定婚姻的搭配。那么,什么是不稳定的婚姻呢?所谓不稳婚姻是说, 比如说有两对夫妇(M1、F1)和(M2、F2),M1的老婆是F1,但他更爱F2;而F2的老公虽说是M2,但她更爱M1——这样的婚姻就是不 阅读全文
posted @ 2012-07-12 12:59 willzhang 阅读(556) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#include<stdlib.h>int num[10008];//n个人的编号int copy[10008];int n,k,m;int f(int n){ if(n==1) { return 0; } return (f(n-1)+k)%n;}int main(){ while(scanf("%d %d %d",&n,&k,&m),n||k||m) { int i; for(i=0;i<n;i++) { num[i]=i+1; cop 阅读全文
posted @ 2012-07-12 08:56 willzhang 阅读(133) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#include<stdlib.h>int a[10008];//置换前的序列int b[10008];//置换后的序列bool flag[10008];struct T{ int first;//每个循环的起始位置 int length;//每个循环的长度 int min;//每个循环的最小值 int sum;//每个循环的总和};int hash[100008];int data[10008];T point[10008];int cmp(const void *a,const voi 阅读全文
posted @ 2012-07-12 08:55 willzhang 阅读(117) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#include<stdlib.h>int a[100008];int b[100008];void out(int m,int n){ int i; for(i=m;i<n;i++) { printf("%d ",i+1); } printf("%d\n",n+1);}int main(){ int c,n; while(scanf("%d %d",&c,&n),c||n) { int i; for(i=0 阅读全文
posted @ 2012-07-12 08:55 willzhang 阅读(84) 评论(0) 推荐(0) 编辑
摘要: #include<stdio.h>#include<string.h>#include<stdlib.h>struct T{ int er[200]; int num;};//n转换为二进制后的表示用数组存起来T change(int n){ T linshi; linshi.num=0; while(n!=0) { if(n%2==1) { linshi.er[linshi.num]=1; linshi.num++; n=(n-1)/2; } if(n%2==0) { linshi.er[linshi.num]=0; linshi.num++; n=n/2 阅读全文
posted @ 2012-07-12 08:54 willzhang 阅读(198) 评论(0) 推荐(0) 编辑