- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 poj 1061 青蛙的约会(扩展欧几里得算法)
思路:设青蛙跳了k次,那么就有(x+mk)-(y+nk)=p*L.即x-y+(m-n)k=p*L,即(m-n)*k≡(y-x) (mod L).这个线性同余方程有解当且仅当gcd(m-n,L)|(y-x).令a=m-n,b=L,c=y-x.用扩展欧几里得解方程ax+by=c.可以求出原方程的一个解.如何求最小正整数解呢?假设我们已经得到一个x0,令d=gcd(m-n,L),那么所有解可以表示为x=
2016-02-16 18:19:41 513
原创 poj 1458 Common Subsequence
#include #include #include using namespace std; #define MAXV 1000 int same(int a,int b){ return a==b?1:0; } int max(int a,int b, int c){ if(a>=b && a>=c) return a; if(b>=a && b>=c) return b;
2016-02-16 11:43:54 360
原创 poj 3304 Segments
题意:求是否存在一条直线,使所有线段到这条直线的投影至少有一个交点。 思路:计算几何。这道题要思考到两点: 1:把问题转化为是否存在一条直线与每条线段都有交点。证明:若存在一条直线l和所有线段相交,作一条直线m和l垂直,则m就是题中要求的直线,所有线段投影的一个公共点即为垂足。 2:枚举两两线段的各一个端点,连一条直线,再判断剩下的线段是否都和这条直线有交点。证明:若有l和所有线段相交,则可
2016-02-16 11:39:53 299
原创 poj 2398 Toy Storage(叉积判断点是否在四边形内)
题意:给出矩形的左上和右下的坐标,在矩形中有n个木棒,木棒之间不会相交,然后给出木棒上下端点的横坐标,这些木棒将矩形分成多个区域,接着有m个玩具,给出玩具的坐标。输出在每个区域中玩具的个数。 思路:叉积判断点是否在四边形区域内。和poj 2318一样的题,只是输入n个木棒的坐标时为无序输入,需进行排序处理,输出时输出玩具数大于0的区域。 poj 2318参考:http://blog.csdn.
2016-02-16 09:24:20 447
原创 poj 2318 TOYS(叉积判断点是否在四边形内)
题意:给出矩形的左上和右下的坐标,在矩形中有n个木棒,木棒之间不会相交,然后给出木棒上下端点的横坐标,这些木棒将矩形分成多个区域,接着有m个玩具,给出玩具的坐标。输出在每个区域中玩具的个数。 思路:叉积判断点是否在四边形区域内。 向量的叉积: 向量的叉积性质可以用来判断点在直线的某侧。进而可以解决点是否在三角形内,两个矩形是否重叠等问题。向量的叉积的模表示这两个向量围成的平行四边形的面积。
2016-02-16 09:04:39 1373
原创 hdu 1069 Monkey and Banana(dp求最大高度)
题意:给定n种长方体,每种可以选择无数个,求这些长方体所能搭建的最大高度。要求放在上面的长方体的长和宽都要比下面的长方体小。 思路:转换过后,此题目考察的是动态规划里的最长有序子序列。对于长方体长宽高x,y,z进行分情况处理,去除一些重复的情况。 #include #include const int MAXN=200; using namespace std; struct Block {
2016-02-15 23:37:23 413
原创 hdu 1029 Ignatius and the Princess IV
题意:n个数字中找出出现次数至少为(n+1)/2的数。 #include #include int A[1000000]; int main() { int n, m, i, ok; while (scanf("%d", &n) != EOF) { memset(A, 0, sizeof(A)); for (i=0; i<n; i+
2016-02-15 22:06:44 327
原创 hdu 1024 Max Sum Plus Plus(dp求m个不相交子段和的最大值)
本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题。 设Num为给定数组,n为数组中的元素总数,Status[i][j]表示前i个数在选取第i个数的前提下分成j段的最大值,其中1 Status[i][j]=Max(Status[i-1][j]+Num[i],Max(Status[0][j-1]~Status[i-1][j-1])+Num[i]) 乍看一下这个方程挺吓人的,因为
2016-02-15 21:40:48 499
原创 poj 2528 Mayor's posters(线段树离散化)
题意:n(n 求出最后还能看见多少张海报。 思路:离散化,如下面的例子(题目的样例),因为单位1是一个单位长度,将下面的 1 2 3 4 6 7 8 10 — — — — — — — — 1 2 3 4 5 6 7 8 离散化 X[1] = 1; X
2016-02-03 22:49:12 268
原创 hdu 1698 Just a Hook(线段树区间覆盖)
#include #include using namespace std; #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 111111; int h , w , n; int col[maxn<<2]; int sum[maxn<<2]; void PushUp(int
2016-02-03 18:16:01 261
原创 hdu 1754 I Hate It(线段树求最大值)
#include #include using namespace std; #define lson l , m , rt << 1 #define rson m + 1 , r , rt << 1 | 1 const int maxn = 222222; int MAX[maxn<<2]; void PushUP(int rt) { MAX[rt] = max(MAX[rt<<1]
2016-02-03 17:26:34 328
原创 poj 2031 Building a Space Station(最小生成树)
题意:给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通。如果两个球有重叠的部分则算为已连通,无需再搭桥。求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离)。 思路:把球A和球B看做无向图图的两个结点,则 边权 = AB球面距离 = A球心到B球心的距离 – A球半径 – B球半径,注意若边权 #include #include #include #inc
2016-02-03 00:37:35 346
原创 poj 1287 Networking(最小生成树)
思路:最小生成树模板。 #include #include #include #define min(a,b) a<b?a:b using namespace std; const int INF=0x3f3f3f3f; const int MAXN=110; bool vis[MAXN]; int lowc[MAXN]; //点是 0 n-1 int Prim(int cost[][MAX
2016-02-03 00:01:11 303
原创 poj 1251 Jungle Roads(最小生成树)
思路:最小生成树模板。 #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int MAXN=110; bool vis[MAXN]; int lowc[MAXN]; //点是 0 n-1 int Prim(int cost[][MAXN],int n) { int ans=0;
2016-02-02 23:52:45 289
原创 hdu 1875 畅通工程再续(最小生成树)
思路:最小生成树模板题。 #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int MAXN=110; bool vis[MAXN]; double lowc[MAXN]; //点是 0 n-1 double Prim(double cost[][MAXN],int
2016-02-02 23:36:34 320
原创 hdu 1233 还是畅通工程(最小生成树)
思路:最小生成树模板题。 #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int MAXN=110; bool vis[MAXN]; int lowc[MAXN]; //点是 0 n-1 int Prim(int cost[][MAXN],int n) { int ans=0
2016-02-02 23:34:42 345
原创 UVa 796 Critical Links(无向图求割边)
#include #include #include #include #include #include using namespace std; /* * 求 无向图的割点和桥 * 可以找出割点和桥,求删掉每个点后增加的连通块。 * 需要注意重边的处理,可以先用矩阵存,再转邻接表,或者进行判重 */ const int MAXN = 10010; const int MAXM
2016-02-02 15:42:10 325
原创 UVa 315 Network(无向图求割点)
题意: 一个无向图,求其中割点的个数目。 输入数据 第一行一个 n 代表有 n 个点 接下来有多行,一直到读入一个 0,算整个地图的读入结束,再读入一个0,文件数据结束。 每行有第一个数字a,代表接下来的数字都和 a 相连。 割点:无向连通图中,如果删除某点后,图变成不连通了,则称该点为割点。 这里割点和 桥 都是无向图里的概念,大家在这里不要混淆了。 求割点 一个顶点u
2016-02-02 11:21:05 380
历年北京理工大学计算机初试专业课
2020-05-13
图解密码技术(第三版)
2018-02-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人