摘要: 题解:按照输入顺序依次将点连接起来,对于连续的三个点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 阅读(253) 评论(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 阅读(633) 评论(0) 推荐(0) 编辑