上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 42 下一页
可以练练代码能力写了个字典树映射,字典树节点中还用一个vector保存了拥有相同构成的字符串,输出时排序一下输出就好了细节处理需要细心View Code #include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<string>#include<map>#include<algorithm>using namespace std;char str[30010][20];class trie{public : int nu Read More
posted @ 2012-03-31 12:57 Because Of You Views(672) Comments(0) Diggs(0) Edit
半平面交的模板O(n^2)在http://www.cnblogs.com/wuyiqi/archive/2012/03/30/2426175.html题意:判断在一个正方形上切出题目要求的凸多边形的最短切痕总和总共才8条边,数据规模不大,时限10s,直接暴力枚举切割的顺序,然后计算这是我第一次接触平面切割,也可以算是处女割了吧,呵呵View Code #include <cmath>#include <cstdio>#include<algorithm>using namespace std;const int maxn = 100;const double Read More
posted @ 2012-03-30 23:19 Because Of You Views(482) Comments(0) Diggs(0) Edit
今天学了学半平面交,其实很简单的,我说的是最原始的思想,复杂度是O(n^2)的相当于中学的时候学的线性规划,用n条直线去切割一个平面,每条直线代表一定的限制,最后如果有解就会在中间留下一个凸核这个凸核中的点就是满足所有的约束条件的解集典型的例子 :给你一个多边形,判断多边形内是否存在一个点,从这个点可以看到多边形周围所有的点做法:多边形的每条边都是一个约束条件,边的顺序为顺时针用每条边的直线去切割当前平面:枚举平面点集中的点,假如当前点(p)在核外,判断p-1与p+1是不是在核内,如果是,则肯定有交点分别把求出的交点加入点集不断重复的做下去最后点集中的点就是要求的的可行解下面是我的模板,自己看 Read More
posted @ 2012-03-30 23:09 Because Of You Views(1538) Comments(0) Diggs(1) Edit
今天又切了一题,做题的同时当然也验证了各种模板每次都感觉有所改进View Code #include <math.h>#include <cstdio>#include<algorithm>using namespace std;const int maxn = 100010;const double eps = 1e-8;inline int max(int x,int y){return x>y?x:y;}inline double max(double x,double y) {return x>y?x:y;}inline double m Read More
posted @ 2012-03-29 23:34 Because Of You Views(388) Comments(0) Diggs(0) Edit
收获不错:线段 、 直线相交神马的更加熟练了,一些细节的处理也加强了给你一个多边形,一条直线,注意,是一条直线,判断这条直线在多边形内部的长度的总和做法很明确,求出所有的交点,按一个方向排序,相邻两个点之间的线段肯定要么全部在多边形内,要么全部不在多边形内,所以只要判断两点间的中点在不在多边形内就可以了这道题目值得注意的是:在求直线与线段交点的时候,先判断一下直线能否与线段相交,再求交点,可以节省很多计算量,不这么做可能就超时了献上我的一大坨代码View Code #include <math.h>#include <cstdio>#include<algorit Read More
posted @ 2012-03-29 23:24 Because Of You Views(534) Comments(0) Diggs(0) Edit
zoj 2419 poj 2079 求点集中面积最大的三角形网上很多的做法都是暴力枚举的,数据太水了才会过,下面的做法是O(n)的,但是没有严格的证明先枚举一条边(i,j),再枚举一个点k,让点k一直跑,跑到最远为止。(凸包的单调性)固定边( i ,k),枚举j,。。。。。。。。。。。。。。。。固定(j、k),。。。。。。。。。。。。。。。。。。。。。。。注意每一次旋转结束后需要更新面积的最大值(如果能更新)如果一次下来 i,j,k都在原来的地方没有动过,就让k往后挪一个位置直到k到了第一个点程序终止View Code #include <math.h>#include <c Read More
posted @ 2012-03-29 19:42 Because Of You Views(1039) Comments(0) Diggs(0) Edit
链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=23701题意:求n个点的最大公约数,有两种操作,增加一个数,删去一个数,删去的数肯定是已经存在的离线处理,先要离散化然后找到每个数相应的位置插入或删除,简单的单点更新gcd(a,b,c,d)=gcd(gcd(a,b),gcd(c,d));View Code #include<cstdio>#include<vector>#include<cstring>#include<algorithm>using names Read More
posted @ 2012-03-28 21:29 Because Of You Views(779) Comments(0) Diggs(0) Edit
2A的题,因为注释没去完。。。。。。题意:给你n个数,求长度大于2的且相邻数字绝对值差不超过H的序列的个数很容易想到一个朴素的O(n^2)DPdp[i]=sigma(dp[j],abs(val[i]-val[j])<=H)由于DP转移过程是求和的操作,所以可以用树状数组来优化求和操作进一步转换:val[i]-H<=val[j]<=val[i]+H,所以每次把val[i]-H到val[i]+H之间的树状数组中的数求和 假设和为pre,dp[i]=pre+1;表示以i结尾的序列的个数序列长度>=1,求和后再把dp[i]放进树状数组即可最后的答案还要减掉n,取出长度为1的序列 Read More
posted @ 2012-03-28 11:21 Because Of You Views(604) Comments(0) Diggs(0) Edit
http://codeforces.com/problemset/problem/160/E题意 :一条直线上有很多车站有n辆车 每辆车的信息是 s,f,t 出发的站点,目的地,以及出发的时间,中途可以在其他站停留m个乘客 每个乘客的信息是 start ,to ,tx 出发的站点 要到的站点 出发时间如果一个乘客能够做上某辆车必须满足s<=start,to<=f,tx<=t而且要满足车的出发时间越早越好。输出时每个乘客应该坐上的车,如果没有输出-1限制条件比较多,出发点 终点 时间都要题目满足要求,而且要在满足前两者的情况下,出发的尽可能早首先很容易想到排序,把汽车和乘客的信 Read More
posted @ 2012-03-28 10:05 Because Of You Views(391) Comments(0) Diggs(1) Edit
View Code #define MIN(a,b) ((a)<(b)?(a):(b))#define INF 999999#define MAX 5110int n,match[MAX];bool sx[MAX],sy[MAX];int lx[MAX],ly[MAX],map[MAX][MAX];bool path(int u){ sx[u]=true; for(int v=0;v<n;v++) if(!sy[v]&&lx[u]+ly[v]==map[u][v]) { sy[v]=true; if(match... Read More
posted @ 2012-03-26 11:41 Because Of You Views(778) Comments(0) Diggs(0) Edit
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 42 下一页