上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 38 下一页
摘要: /*matrix a={ {0,1,0,0,0,0,0,0,0,0}, {0,0,1,0,0,0,0,0,0,0}, {0,0,0,1,0,0,0,0,0,0}, {0,0,0,0,1,0,0,0,0,0}, {0,0,0,0,0,1,0,0,0,0}, {0,0,0,0,0,0,1,0,0,0}, {0,0,0,0,0,0,0,1,0,0},{0,0,0,0,0,0,0,0,1,0}, {0,0,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1}, }; */#include #include #define maxn 15#define rep(i,n) for( 阅读全文
posted @ 2014-04-09 14:15 forever97 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 题目大意:求小于n的gcd(i,n)大于1的个数;题解:欧拉函数直接求gcd(i,n)==1的个数 用n减即可#include int eular(int n){ int ret=1,i; for(i=2;i*i1) ret*=n-1; return ret;}int main(){ int n; while(scanf("%d",&n),n!=0)printf("%d\n",n-eular(n)-1); return 0;} 阅读全文
posted @ 2014-04-07 15:10 forever97 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 筛法计算欧拉函数#include #include using namespace std;const int maxn=3000005;long long phi[maxn];int main(){ int i,j,a,b; for(i=1;i<=maxn;i++) phi[i]=i; for(i=2;i<=maxn;i+=2) phi[i]/=2; for(i=3;i<=maxn;i+=2)if(phi[i]==i){ for(j=i;j<=maxn;j+=i) phi[j]=phi[j]/i*(i-1); } while(sca... 阅读全文
posted @ 2014-04-07 14:51 forever97 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 单个欧拉函数int eular(int n){ int ret=1,i; for(i=2;i*i1) ret*=n-1; return ret;}筛法求欧拉函数#include #include using namespace std;const int maxn=3000005;... 阅读全文
posted @ 2014-04-07 14:37 forever97 阅读(1125) 评论(0) 推荐(0) 编辑
摘要: 题解:计算凸包周长#include #include #include const int size=1000; using namespace std; struct pint{int x,y;}x[size]; int n,l,ans[size],cnt,sta[size],tail; bool cmp(pint a,pint b){return (a.y1 && !crossleft(x[sta[tail-1]],x[sta[tail-2]],x[i])) tail--; sta[tail++]=i; } for... 阅读全文
posted @ 2014-04-07 14:16 forever97 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题解:先算出凸包,然后枚举凸包上的点计算即可#include #include #include #include using namespace std;const int N = 50005;const double eps = 1e-8;struct point {int x,y;}p[N], stack[N];bool isZero(double x){return (x>0?x:-x)<eps;}double dis(point A, point B){return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));}int cr 阅读全文
posted @ 2014-04-07 13:54 forever97 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 增量法的最小包围圈算法,不会……#include #include #include #include #include using namespace std;const double EPS = 1e-10;inline int sgn(double x) { return (x > EPS) - (x 1 && sgn(crossDet(ch[m - 2], ch[m - 1], pt[i])) = 0; i--) { while (m > k && sgn(crossDet(ch[m - 2], ch[m - 1], pt[i])) 1) m 阅读全文
posted @ 2014-04-07 13:42 forever97 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题解:每放一根棍子,都判断一下它与它前面的且在顶端的棍子是否相交,相交的话则将相应的棍子从解空间中除去。#include const double eps=1e-14; const int maxn=1e5+10; struct node{double x1,y1,x2,y2;int w;}e[maxn],f[maxn]; double cross(double x1,double y1,double x2,double y2){return x1*y2-x2*y1;} int find(node a,node b){ double c[4]; c[0]=cros... 阅读全文
posted @ 2014-04-07 13:28 forever97 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题解:计算凸包……#include #include #include #include using namespace std; struct node{int x,y;}vex[1005],stackf[1005]; bool cmp1(node a,node b){ if(a.y==b.y)return a.x0?1:0; } int main(){ int t; while(scanf("%d",&t),t!=0){ for(int i=0;i=1&&cross(stackf[top-1],stackf[top],vex... 阅读全文
posted @ 2014-04-07 13:13 forever97 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 在聚光灯的诗再也会不是我笔下的那首,那些反复想起直到流泪的记忆也不会有人了解,评委只是给出一个分数而已,为与他们无关的情感给出一个或许公正的评价。或许他们说的对,我的诗没有任何咆哮,但记忆本身,就是一种梦幻般的温柔…… 这首诗,给所有温暖过我的人,愿你们安好…… 让阳光, 透过记忆的叶隙, 在春天流淌过的地方, 翻开一页时光。 一个人的时候,总会不断地想起那些过去很久的事,就如同卖火柴的小女孩在严寒中点亮一根又一根的火柴,回忆着一点一滴的温馨,或许只有这样,才可以抵御来自整个世界的冷酷,所有的记忆总会被时间染上华丽的色彩,在心最柔软的地方歌唱着…… 在微风无法触及的地方, ... 阅读全文
posted @ 2014-04-05 18:14 forever97 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题解:计算几何求多边形的重心,该多边形质量分布均匀,质量分布均匀。 特殊地,质量均匀的三角形重心: X = (x0+x1+x2) / 3 Y = (y0+y1+y2) / 3将多边形划分为若干个三角形。若我们求出了每个三角形的重心和质量,可以构造一个新的多边形,顶点为所有三角形的重心,顶点质量为三角形的质量。由于三角形的面积与质量成正比,所以我们这里用面积代替质量来计算。多边形有可能为凹多边形,三角形有可能在多边形之外。如何处理这种情况呢?很简单,我们使用叉积来计算三角形面积,当三角形在多边形之外时,得到“负面积”就抵消掉了。所以,把每个三角形看作一个质量为面积的点,然后求出这个三角形X... 阅读全文
posted @ 2014-03-31 10:25 forever97 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 分析:判断两直线是否相交:分两步:①:快速排斥实验 设以线段P1P2为对角线的矩形为R,以线段Q1Q2为对角线的矩形为T,如果R和T不相交,显然两线段不会相交。②:跨立实验 如果两直线相交,则两直线必然相互跨立对方。若P1P2跨立Q1Q2,则矢量(P1-Q1)和(P2-Q1)位于矢量(Q2-Q1)的两侧,即(P1-Q1)X(Q2-Q1)*(P2-Q1)X(Q2-Q1)0. 当(P1-Q1)X(Q2-Q1)=0 时,说明(P1-Q1)和(Q2-Q1)共线,但因为已经通过快速排斥实验,所以P1一定在线段Q1Q2上,同理,(Q2-Q1)X(P2-Q1)=0 说明P2一定在直线Q1Q2上。所以判断P1 阅读全文
posted @ 2014-03-31 09:50 forever97 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题解:按照输入顺序依次将点连接起来,对于连续的三个点p0,p1,p2,令向量a=p1-p0,b=p2-p1若是凸多边形,那么b相对于a一定是向逆时针方向旋转的判断两向量的旋转方向,可以使用向量的叉积a×b=x1×y2-x2×y1a×b>0 b在a的逆时针方向a×b=0 b平行于a(共线)a×bstruct node{int x,y;}pt[1010];int n,x1,x2,y1,y2;int direction(int x1,int y1,int x2,int y2){return x1*y2-x2*y1;}int test( 阅读全文
posted @ 2014-03-30 16:40 forever97 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 题目大意:大厅每个位置都有一个文物或者一个守卫,文物是安全的前提是:关键位置上必须有一个守卫,或者文物本身的位置上有一个守卫。求保证每个文物是安全的守卫的最少数量。#include #include #include using namespace std; int map[55][55... 阅读全文
posted @ 2014-03-30 16:05 forever97 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你一个矩形,然后输入矩形里面池塘的坐标(不能放东西的地方),问可以放的地方中,最多可以放多少块1*2的长方形方块,并输出那些方块的位置。题解:我们将所有未被覆盖的分为两种,即分为黑白格(i+j结果为奇数和偶数),然后将相邻的连边,做一遍最大匹配即可。#include #include #include #include using namespace std;const int N=105;vector v[N];int q,w,m,n,k,odd,even,oddx[N],evenx[N],oddy[N],eveny[N],used[N],link[N];int map[N][N 阅读全文
posted @ 2014-03-30 15:46 forever97 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给你一个 n*n 的矩阵,每个格子上对应着相应颜色的气球,每次你可以选择一行或一列的同种颜色的气球进行踩破,问你在K次这样的操作后,哪些颜色的气球是不可能被踩破完的。题解:对于每一种颜色建图,对于每一个点,要么横坐标被染色,要么纵坐标被染色,所以就是最小点覆盖。#include #include #include #include using namespace std;const int N=105;int k,m,n;int ans[55],link[N],used[N];int map[N][N];bool vis[N];vector v[N];bool Dfs(int k){ 阅读全文
posted @ 2014-03-30 14:14 forever97 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 题解:将所有的横坐标看作一边的点,纵坐标看作另一边的点,然后二分图匹配即可,建图很巧妙……#include #include #define maxn 105 bool map[maxn][maxn],vis[maxn]; int n,m,k,mark[maxn],edge[maxn*maxn][2]; bool dfs(int v){ for(int i=1;iHungarian()) sum++; map[edge[i][0]][edge[i][1]]=true; } printf("Board %d hav... 阅读全文
posted @ 2014-03-30 13:16 forever97 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 题目大意:在一个城镇,有m个路口,和n条路,这些路都是单向的,而且路不会形成环,现在要弄一些伞兵去巡查这个城镇,伞兵只能沿着路的方向走,问最少需要多少伞兵才能把所有的路口搜一遍。题解:这道题是有向无环图的最小路径覆盖问题,即求二分图最大匹配。首先建图,然后匹配,最后未被匹配到的点数就是答案,画画图很容易得到这个结论。#include #include #include using namespace std;const int N=505;int link[N],used[N];vector v[N];bool Dfs(int k){ for(int i=0;i<v[k].size(); 阅读全文
posted @ 2014-03-26 14:55 forever97 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。题解:由于只要一台机器调到某模式就可以完成一个任务那么直接相当于在平面内选取几个点可以使全部的边被覆盖,所以就是二分图的最小点覆盖。#include #include #include using namespace std;const int 阅读全文
posted @ 2014-03-26 14:28 forever97 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目大意:n个同学,一些男女同学会有缘分成为情侣,格式ni:(m)n1n2n3表示同学ni有缘与n1,n2,n3成为情侣,求集合中不存在有缘成为情侣的同学的最大同学数。题解:图论知识:二分图最大独立集=总点数-二分图最大匹配,但是不知道同学的性别,所以将一个人同时看做女生和男生,就形成了二分图~#include #include #include using namespace std;const int N=505;int link[N],used[N];vector v[N];bool Dfs(int k){ for(int i=0;i<v[k].size();i++){ ... 阅读全文
posted @ 2014-03-26 13:45 forever97 阅读(150) 评论(0) 推荐(0) 编辑
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 38 下一页