- 博客(40)
- 收藏
- 关注
原创 HDU 1671
这是一道字典树的问题,直接利用模板,不过还要一个释放内存的函数!#include #include #include #include using namespace std;typedef struct trie{ int v; trie *next[10];};trie *root;void creattrie(cha
2013-08-30 10:52:03 666 1
原创 HDU 1251
这是一道入门字典树!代码如下:#include #include #include #include using namespace std;struct trie{ int v; trie *next[26];} root;void creattrie(char *str){ int len=strlen(str); trie *p=
2013-08-28 18:30:08 545
原创 HDU 1305
这道题是字典树入门题目,今天下午刚学字典树,理解了原理,然后看看代码就会发现简单了!#include #include #include #include using namespace std;typedef struct trie{ int v; trie *next[2];}trie;trie *root;void creattrie(ch
2013-08-28 18:28:20 577
原创 HDU 1431
/* 这题要先暴力找出最大的素数时多少,是9989899,所以数组可以不用开这么大!*/#include #include #include #include using namespace std;const int inf=9989900;bool a[inf];void prim(){ int i; int k,t; for(i=1
2013-08-27 13:21:25 583
原创 HDU 1395
这道题目,可以使用笨一点的办法,利用蒙哥马利的快速幂取模的办法做,代码如下:#include #include #include using namespace std;__int64 calcute(__int64 a,__int64 b,__int64 c)//蒙哥马利快速幂取模{ __int64 ans=1; while(b) {
2013-08-26 19:23:31 520
原创 HDU 1211
/* 这题其实不难,只要慢慢看懂题目意思,按照题目说的一步一步来做,就可以AC了; 但是这里有一个地方必须要注意!下面会指出来*/#include #include #include #include using namespace std;__int64 n;__int64 calculate(__int64 k1,__int64 k2){ __int6
2013-08-26 17:05:13 633
原创 HDU 1124
/* 这题题目意思是求一个数的阶乘得到的数中有多少个0!这题的解题关键是: N!=1*2*3*4*5*6*7*……*N然后每个数都可以分解质因数得到==2^a*3^b*5^c*7^d.... 然后你会发现的就是会产生0的是2*5,所以只要找出N内5的幂次就可以了, 例如 50!,只要找出5的幂次就可以!如下解释: 5 10 15 20 25 30 35 40
2013-08-26 16:27:43 597
原创 HDU 1019
这段时间搞数论,这道题目以前就做过,现在做一下,竟然WA2次,说多了都是泪啊! 题目说好了范围不会超过32位,可这样就是错了,后来改成__int64,发现竟然坑爹, 的过了!!!!无语代码:#include #include #include using namespace std;int gcd(int a,int b){ if(a==0||b==0) {
2013-08-26 15:18:24 495
转载 CROC-MBTU 2012, Elimination Round (ACM-ICPC) D题
这道题目虽然是CF的D题,但是知道位运算的人,会发现这道题目就是a+b一样简单,位运算 & ^ | 这三种!#include #include using namespace std;int main(){ int i,j,n,x; while(scanf("%d",&n)!=EOF) { for(i=0; i
2013-08-25 20:22:54 590
原创 HDU 2202 求最大三角形
其实这题和poj中一个题目很像,这题是一些散点,求最大三角形面积,而poj里有一题是求两点之间最大距离!思路都是一样的,点都在凸包这线上,然后利用凸包公式,和多边形面积公式!代码如下:#include #include #include #include #include #include using namespace std;const int maxn=50005;int
2013-08-08 19:03:09 639
原创 HDU 1392 凸包入门题目,求周长
这题就是凸包入门题目,求凸包周长#include #include #include #include #include using namespace std;const int maxn=105;struct point{ double x; double y; double there;} p[maxn],chs[maxn];boo
2013-08-08 16:53:38 506
原创 poj 2187 凸包+平面上点之间最大距离
/* 这道题目是算一个平面内的一些点的之间最大的距离,暴力肯定会超时,最远距离,一定是凸包上的两个点的距离, 先用模板找到凸包线上的点,然后枚举任意两点之间的距离,求出最大的距离!*/#include #include #include #include #include using namespace std;const int maxn=50005;int n;
2013-08-08 14:58:41 676
原创 poj 2007 极角排序
极角排序有四种方法,我一开始就是先算出极角来,然后进行排序,可交上去却是WA,现在还没有搞,后面用另一种还是错了,最后用了这种才过的!代码如下:#include #include #include #include #include using namespace std;const int maxn=55;struct point{ double x,y;} p
2013-08-08 13:47:44 610
原创 poj 3348
这题其实是一个简单的模板题,可我就纠结了好久!哎/* 这题就是凸包模板加多边形面积模板!*/#include #include #include #include #include using namespace std;const int maxn=10005;int n;struct point{ double x;
2013-08-08 09:28:05 622
原创 HDU 3775 pick 定理
这道题目也是用到了pick定理,不过这里有一个巧妙的地方,就是在直线上的整点数,就是字符串的长度,因为每一次一步,都是整数,这题还有好多坑人的地方:#include #include #include #include using namespace std;const int maxn=1000005;char c[maxn];int a[8]= {1,1,0,-1,-1,
2013-08-07 09:14:08 623
原创 POJ 2954
第二道 用到pick定理的题目,一直错在一个地方了,后来才发现,代码:#include #include #include #include using namespace std;int gcd(int a,int b){ if(!a || !b) { return a>b?a:b; } else { r
2013-08-06 21:52:58 594
原创 poj 1265 多边形面积
今天做这个让我学到了一个pick 定理:pick定理: 设F为平面上以格子点为定点的单纯多边形,则其面积为:S=b/2+i-1。 b为多边形边上点格点的个数,i为多边形内部格点的个数。 可用其计算多边形的面积,边界格点数或内部格点数。代码和解析如下:#include #include #include #inclu
2013-08-06 19:38:33 564
原创 POJ 1654
这题目一开始就没有看懂,后来比赛结束后,看别人的报告,才知道什么意思,:在一个矩阵上面,一开始位于原点,现在你可以往8个方向走,每次走1个单位(上下左右)或者根号2个单位(其他四个方向)。现在给你每次走的方向,(保证最后回到原点)。问你做过的边多围成的多边形的面积是多少。1:西南 2:南 3:东南 4:西 5: 不走 6: 东 7:西北 8:北 9:东北 代码:#include
2013-08-06 16:40:46 518
原创 poj 2773 欧几里得 一个拓展应用
题目大意就是给出n和k求出第k个与n互素的数这里涉及到了 欧几里得的一个重要知识点:如果(a, b)互质的话,那么(b*t+a, b)肯定互质,其中t为正整数!那么这就是以循环周期的了那么这题就可以利用这个来做了,代码和详解如下:#include #include #include #include using namespace std;const int maxn=100000
2013-08-06 11:24:00 550
原创 Codeforces Beta Round #74 (Div. 2 Only) A题
这道题目,静下心来就应该可以想出来,我当时没有想到!#include #include #include #include using namespace std;int pp(int n){ if(n==1)n-=1; if(n>=2)n-=2; return n;}int main(){ int r,g,b; int time=0
2013-08-06 10:08:48 527
原创 位运算(左移&&右移)
左移:<<;右移:>>a>>1,其实就是a/2a<<1,其实就是a*2#include #include using namespace std;int main(){ int a=8; printf("%d %d\n",a>>1,a<<1); return 0;}//结果是 4 16
2013-08-05 11:05:23 739
原创 按位异或运算
上次从学长那里知道按位异或可以用来交换两个变量的值:例如:a=7,b=8;a=a^b;b=a^b;a=a^b;这样就很快的交换了两个变量的值:a=8, b=7;
2013-08-05 11:00:02 720
原创 Commando War, UVa 11729
/* Commando War, UVa 11729 贪心题目*/#include #include #include #include #include using namespace std;const int maxn=1005;int n;struct node{ int b; int j;} p[maxn];int cmp(n
2013-08-04 22:11:47 527
原创 POJ 2398
这道题目和上一道真是姐妹题目啊!就是多了一个排序,因为2318这题已经排好序了,而这题是没有排好序的!代码如下:#include #include #include #include using namespace std;const int maxn=1005;int num[maxn];int n,m;struct point{ d
2013-08-04 17:09:47 500
原创 POJ 2318
这是一道计算几何题,题意大概是:在一个大矩形里有n条分割线把矩形分割成n+1部分、再给出一些玩具的坐标、要求统计每个部分内有多少个玩具、思路:利用二分N个区域来,然后利用叉乘来判断是不是在其区域类!这里要利用叉乘的一个性质:(1)P*Q>0,P在Q的顺时针 (2)P*Q==0 ,P和Q共线 (3)P*Q<0, P在Q的逆时针代码如下:#include #include #inc
2013-08-04 11:29:38 697
原创 HDU 3177
这道题目首先要理解题意:给你一个洞的体积V,然后放N件物品,然后给出N组数据,分别代表的意思是:停放体积 移动体积然后你想想:按照两者相差值按照由大到小排序,这个慢慢体会一下!#include #include #include #include #include #include #include using namespace std;const int maxn=1005
2013-08-03 20:31:05 597
原创 poj 1922
#include #include #include #include #include using namespace std;const int inf=0x3f3f3f3f;const int maxn=10005;int n;struct node{ int x; int y; double time;}p[maxn
2013-08-03 18:15:04 557
原创 HDU 1009
这道贪心题目类型跟上次不同,不是活动安排,题目大意是:有m个猫粮,n个房间,下面n组数据,每组两个,分别代表的是:把猫粮放到房间里能得到多少价值,第二个数是一个房间放的猫粮!#include #include #include #include #include #include using namespace std;const int maxn=1005
2013-08-03 16:14:33 530
原创 HDU 2390
我发现贪心的典型题目就是活动安排,这是一道入门贪心!#include #include #include #include #include #include using namespace std;const int maxn=50005;int m,t;struct node{ int day; int start; int end;} p
2013-08-03 14:42:31 610
原创 HDU 2037
这是一道经典的贪心题,活动安排#include #include #include #include #include #include using namespace std;const int maxn=105;int n;struct node{ int x; int y;}p[maxn];int cmp(node a,node b){
2013-08-03 12:30:48 490
原创 POJ 3907
这是一道求多边形面积的题目,很水的!不过我好像又学到了新的知识点!#include #include #include #include #include using namespace std;const int maxn=105;int n;struct node{ double x; double y;} p[maxn];double solve(
2013-08-02 19:53:36 683
原创 poj 1269 判断直线相交,并求交点
#include #include #include #include #include using namespace std;#define EPS 1e-9#define inf 1e10int n;bool pp(double x1,double x2)//这里是由于精度的问题,判断是否相等{ if(abs(x1-x2)<EPS) retur
2013-08-02 18:30:51 615
原创 HDU 1086 判断线段相交
/* 判断线段相交利用叉乘, 因为 两向量叉乘==两向量构成的平行四边形(以两向量为邻边)的面积 , 所以上面的公式也不难理解.而且由于向量是有方向的, 所以面积也是有方向的, 通常我们以逆时针为正, 顺时针为负数.改良算法关键点就是:如果"线段ab和点c构成的三角形面积"与"线段ab和点d构成的三角形面积" 构成的三角形面积的正负符号相异,那么点c和点d位于线
2013-08-02 18:26:46 563
原创 HDU 2036 多边形的面积
以下两种方法求多边形面积:一:#include #include #include #include #include using namespace std;const int maxn=105;int n;struct node{ double x; double y;}p[maxn];double area(node p[],int n){
2013-08-01 21:31:44 525
原创 hdu 1115 多边形重心
#include #include #include #include using namespace std;struct node{ double x; double y;};double area(node p1,node p2,node p3){ double ans; ans=p1.x*p2.y+p2.x*p3.y+p3.x*p1
2013-08-01 20:54:35 457
原创 poj 1422 最短路径覆盖
我一开始不明白什么是最短路径覆盖,后面看了书,才知道二分图模型的应用中4种,分别是:1:最小点覆盖 2:最小边覆盖==最大独立点集 3:最短路径覆盖 4:最小点权覆盖最短路径覆盖==节点数--二分图最大匹配数(构造后的图)#include #include #include using namespace std;const int maxn=200;int mp[maxn][ma
2013-08-01 15:51:58 758
原创 POJ 2239
这道题目我有必要解释一下题意::在大学里有许许多多的课程,现在小明需要去选择课程,他是一个爱学习的人,所以想尽可能多的选择课程,在学校里有n个课程,并且在学校规定,每周里的每天有12节课,那么一周就有7*12节课。输入第一行为n,代表有n个课程接下来n行,每行第一个数字x代表这个课程在这一周里面需要上x次。然后跟着x对数字,第一个D代表这周的哪一天,第二个C代表这天的哪一节课
2013-08-01 12:33:54 568
原创 POJ 1274 匈牙利算法
这道题目和上一题差不多,就是求的不同,这题求最大匹配!#include #include #include #include using namespace std;const int maxn=205;int mp[maxn][maxn];int mark[maxn];int pipei[maxn];int n,m;bool find(int x){ for(
2013-08-01 11:17:27 501
原创 POJ 1469 匈牙利算法
这道题目好坑 啊!有两个地方要注意:一:就是科目是从1到n,每一行的第一个数不是科目,而是报这一门的人数, 二:就是最大匹配数必须要等于科目数才能AC,否则就是WA#include #include #include #include using namespace std;const int maxn=310;int mp[maxn][maxn];int mark[maxn];
2013-08-01 11:01:56 501
原创 HDU 2063 匈牙利算法
这是一道简单的二分匹配的题目,很适合入门者做!#include #include #include using namespace std;const int maxn=1005;int mp[maxn][maxn];int mark[maxn];int pipei[maxn];int k,m,n;bool find(int x){ for(int i=1; i<
2013-08-01 10:22:51 446
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人