上一页 1 ··· 5 6 7 8 9 10 11 下一页
摘要: 题意:给出一个去掉几个点后的凸包,判断是不是原始凸包。看了大牛的思想后才知道:只要判断凸包的每个边上有三个顶点,就可以判断该凸包为原始凸包。1、少于六个点不可能是原始凸包。2、利用graham算法找出形成该凸包至少需要的顶点,存进数组res[]中,剩余的存进leave[]数组中。3、遍历两个数组判断是否满足条件。#include<iostream>#include<cstdio>using namespace std;#define MAX_INT 123456789struct point{ int x,y;};point vertex[1000];int res[1 阅读全文
posted @ 2011-11-12 08:39 书山有路,学海无涯 阅读(657) 评论(0) 推荐(0) 编辑
摘要: 我的第一道凸包题,终于弄懂了Graham算法,对我来说弄懂一个算法是一个痛苦的过程,我痛苦了我好几天……Grahma算法模板:1、 寻找一个基准点,这个点通常是最左边的最下面那个点(其实只要这个点一定会在凸包边界上就行),然后将之个点置于第一个位置。2、 将所有点按相对于基准点的极角排序。3、 因为排序之后前两个点一定会在凸包上,假设第三个点也在凸包上,因此我们可以从第四个点开始依次扫描每个点。对于每个当前点他在当前时刻是极角最大的点,所以在当前时刻它必定在凸包上,那么此时就可能改变了它前一个点是不是在凸包上。怎么判断呢?我们可以咱当前点到推三个点,假设是p1,p2,p3,判断这三个点所形成的 阅读全文
posted @ 2011-11-05 13:56 书山有路,学海无涯 阅读(1242) 评论(1) 推荐(0) 编辑
摘要: 大致题意也就是给出大正方形和多个小正方形的边长,用多个小正方形能否拼成一个大正方形。这是一道搜索的题目,如果暴搜的话,边长为23左右就出不来结果过了。看了大牛的思想有很多方法可以剪枝的。1、 小蛋糕用一个cake[11]的数组来存,cake[i]表示边长为i的蛋糕有cake[i]个,这样可以避免相同的蛋糕多次判断;2、 用一维的col[41]来代替二维数组,col[i]表示第i行已经用了前col[i]列;3、 遇到合适情况直接返回,不必要再往下搜索了;4、 所有的小蛋糕面积和等于大蛋糕面积;接下来说怎么搜索吧;1、在col[]数组中找出使用的最小的行minRow,同时也就找出了下一次方小蛋糕的 阅读全文
posted @ 2011-10-31 11:37 书山有路,学海无涯 阅读(1467) 评论(1) 推荐(0) 编辑
摘要: 题意:给出一数组,数组首尾是可以相接的,要求求出最大连续序列值,并且不可以包括所有元素值。遇到求这种最大连续序列值,看了网上大牛的思想才知道一般分为两种情况:1、不同时包括两端点的情况,这时直接求整个序列中的最大连续序列值;2、同时包括两端点元素,这时求整个序列中的最小连续序列值,然后用总和减去它,就是所要求的值。具体怎么求法呢?假设我们将整个序列分成两个连续的序列a,b;与整个序列设成A。假如我们知道a,b序列各个的从左向右最大连续序列值lmax,从右往左的最大连续序列值rmax,和从左向右最小连续序列值lmin,从右往左的最小连续序列值rmin,和每个序列的最大连续序列值nmax和最小连续 阅读全文
posted @ 2011-10-29 19:57 书山有路,学海无涯 阅读(1068) 评论(0) 推荐(0) 编辑
摘要: 平生第一道线段树,A的太艰难了,一开始就RE,以为是数组开小了,增加了之后仍然RE,看了discuss后才知道文中有一就话没看到,“here A, B, C are integers, and A may be larger than B”,原来left可以大于right,改了之后结果TLE,我可纠结的不得了。后来看到一些大牛的博客中写道要用延迟操作,结果终于弄懂了什么是延迟操作。修改之后再提交结果WA(悲哉),后来自己做了一些测试数据,却发现自己仅在涂色的时候进行了延迟操作,其实在查找的时候仍然需要,修改之后AC了。#include<iostream>#include<cs 阅读全文
posted @ 2011-09-21 20:11 书山有路,学海无涯 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 拿五张牌做例子吧,根据题意刻画出如下图形(‘*’代表未知牌)* 1 (1前面有1张未知牌)* * 2 ( 2前面有2张未知牌)* * * 3 (3前面有3张未知牌)* * * * 4 (4前面有4张未知牌)* * * * * 5 (5前面有5张未知牌)我们把它写成一个序列:* 1 * * 2 * * * 3 * * * * 4 * * * * * * 5我们找前5个作为放牌的5个位置,显然1和2的位置确定。* 1 * * 2 把后面的序列中的前3个* * *填充到前面的3个未知牌 :* 1 * * 2接着把后面的3个3 * * 填充到前面的三个未知牌,这时3被确定3 1 * * 2接着把后面的 阅读全文
posted @ 2011-09-13 14:46 书山有路,学海无涯 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 这是一个吧A进制数转换为B进制数的问题,如果不用库函数的话,思路清晰但实现起来便有些繁琐了。又因为只有7位数便可以尽情的使用库函数中的strtol和itoa了。strtol的原型为long strtol(const char* s,char ** endp,int base) 含义是:将base进制的字符串s转换为十进制的函数。endp通常为零,它是处理二进制、十六进制的时候必不可少的函数。itoa的原型为 char*itoa(int n,char* s,int base) 含义是:把数值n转换为base进制的函数,存进s中。#include<stdio.h>#include< 阅读全文
posted @ 2011-09-02 20:44 书山有路,学海无涯 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 大致题意:求s到t的可行路径上最小值的最大值(有点拗口啊)也就是说从s到t的每一条可行路径上都有一条最小值,有多条路径的话就求这些最小值的最大值。思路:用求最短路的方法来求解,我们可以把flow[]数组用于存储源点到当前点的可行的最大载重量,假如a->b权值为c的话,怎么改松弛条件呢?k=(flow[a]<c) ? flow[a] : c; if(flow[b]<k) flow[b]=k;这就保证了到达某个点的最大载重量。#include<iostream>#include<cstring>#include<queue>using name 阅读全文
posted @ 2011-08-22 08:33 书山有路,学海无涯 阅读(959) 评论(0) 推荐(0) 编辑
摘要: 终于尝试了网络流,看了两天的网络流,稍微有点头绪,做了第一道网络流的题感觉还不错。在这过程中让我最苦恼的还是用邻接表的存储结构,现在还是初步了解就不做总结吧。#include<iostream>#include<queue>#include<cstring>using namespace std;#define MAX_INT 1234567890struct node{ int v; int value; int opposite; int next;};node edge[2001];int head[201],pre[201],flow[201],st 阅读全文
posted @ 2011-08-21 13:20 书山有路,学海无涯 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 大致题意:给出一个矩阵,矩阵内的值的范围为:[-25,25](注意这个范围),从一个格a走到相邻的格b(a,b代表相应格的值)的速度为2^(a-b)*v,时间就是速度的倒数。问从左上角走到右下角所用的最短时间。很显然是最短路问题,用spfa来求解,该题有一个易出错的地方,因为矩阵内的值范围[-25,25],如果用1<<x的方式求2的幂,很显然这个数会整数超出范围。开始没注意这个问题结果TLE,解决方法可以将1替换为__int64的数。所以dist数组初始化时需将最大值足够大。#include<iostream>#include<cstring>#includ 阅读全文
posted @ 2011-08-20 17:05 书山有路,学海无涯 阅读(582) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 下一页