摘要:        
题解:按照输入顺序依次将点连接起来,对于连续的三个点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
阅读(333)
评论(0)
推荐(0)
        
            
        
        
摘要:        
题目大意:大厅每个位置都有一个文物或者一个守卫,文物是安全的前提是:关键位置上必须有一个守卫,或者文物本身的位置上有一个守卫。求保证每个文物是安全的守卫的最少数量。#include #include #include using namespace std; int map[55][55...    阅读全文
posted @ 2014-03-30 16:05
forever97
阅读(227)
评论(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
阅读(264)
评论(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
阅读(299)
评论(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
阅读(688)
评论(0)
推荐(0)
        

 浙公网安备 33010602011771号
浙公网安备 33010602011771号