
知识点整理
文章平均质量分 70
xiaotaoqibao
这个作者很懒,什么都没留下…
展开
-
A^B mod C
#include unsigned long long mul(unsigned long long a,unsigned long long b,unsigned long long c) { unsigned long long ret=0,tmp=a%c; while(b) { if(b&0x1)原创 2009-07-28 08:20:00 · 904 阅读 · 0 评论 -
16进制的输入和输出【A+B Again(HDU2057)】
Problem DescriptionThere must be many A + B problems in our HDOJ , now a new one is coming.Give you two hexadecimal integers , your task is to calculate the sum of them,and print it in hexadecimal t原创 2009-10-07 14:01:00 · 1716 阅读 · 0 评论 -
如何求多边形的重心
题目描述:已经顺序给出多边形的各个顶点,求重心 #include #include #include using namespace std; struct point{ int x, y;}; point p[1000001]; double cal(int i, int j){ double res; res = p[i原创 2009-12-25 11:19:00 · 3028 阅读 · 0 评论 -
N的三次方之和的证明
证明1^3+2^3+3^3+...+n^3=(1+2+3+...+n)^2=[n(n+1)/2]^2 n^4-(n-1)^4 =[n^2-(n-1)^2][n^2+(n-1)^2] =(2n-1)(2n^2-2n+1) =4n^3-6n^2+4n-1 2^4-1^4=4*2^3-6*2^2+4*2-1 3^4-2^4=4*3^3-6*3^2+4*3-1 4^4-3^4=4*4^3-6*4^2+4*原创 2009-12-24 22:56:00 · 12504 阅读 · 1 评论 -
动态规划
基本模型 多阶段决策过程的最优化问题。 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线,如图所示:(看词条图) 这种把原创 2009-12-26 19:47:00 · 936 阅读 · 0 评论 -
更高效率的A^B mod C
#include#includeusing namespace std;__int64 a,b,c;char s[1000005]; __int64 eular(__int64 n) { __int64 ans=1,i; for(i=2;i*i<=n;i++) {原创 2010-03-15 22:21:00 · 546 阅读 · 0 评论 -
C语言的六种位运算符
一、位运算符C语言提供了六种位运算符:& 按位与| 按位或^ 按位异或~ 取反>> 右移1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补原创 2010-03-15 22:37:00 · 785 阅读 · 0 评论 -
自己写的一个关于线段树的代码
<br />#include <iostream>using namespace std;#define max(a,b) a>b?a:bstruct LineTree{ int left,right; int cover; LineTree *lchild,*rchild;};LineTree* CreateTree(int a,int b) //建立线段树{ LineTree *root; root=new LineTree; root->l原创 2010-07-20 17:41:00 · 766 阅读 · 0 评论 -
哈希表的模板
<br />#include <conio.h>#include <memory.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define szNAME 80#define HASH_ROOT 47 /*用于计算哈希地址的随机数*/#define szHASH 50 /*哈希表总长度*/#define POPULATION 30 /*学生总数*//*哈希表结构体*/struct THash原创 2010-07-26 10:17:00 · 1893 阅读 · 0 评论 -
精灵哈希算法 (Elf Hash) 可以把任意长度的数据转换成int数字
<br />unsigned int ELFHash(char* str){unsigned int hash = 0;unsigned int x = 0;while(*str){hash = (hash << 4) + (*str++);if((x = hash & 0xF0000000L) != 0){hash ^= (x >> 24);hash &= ~x;}}return hash & 0x7FFFFFFF;}原创 2010-07-26 10:36:00 · 2665 阅读 · 0 评论 -
树状数组
树状数组(Binary Indexed Tree)是又一种静态的树结构。它的首要用途是用于维护前缀和,也即:一数组a[1..n],随时会改变其中某a[i],还会询问s[i]=a[1]+a[2]+…+a[i],树状数组可完美解决这一问题。定义数组c[0..n],其中c[i]=a[i-2^k+1]+a[i-a^k+2]+…+a[i],其中k为i在二进制下末尾0的个数。当我们改变一个a[i]时,会有很多c[i]随之改变;若需查询某个s[i],需要累加多个c[i]。好在确定需要改变或累加的元素都可以用比较简便的方法原创 2010-08-13 09:02:00 · 475 阅读 · 0 评论 -
如何判断一个整数是不是完全平方数
bool isSqr(int n){ int a = int(sqrt(n) + 0.5); return a * a == n;}bool isSqr(int n) { int a = (int)(sqrt(n) + 0.0001); return a * a == n; } bool isSqr(int n) { int a = (int)sqrt(n原创 2009-10-07 16:20:00 · 7785 阅读 · 0 评论 -
并查集(Union-Find Sets)及其应用
并查集 (Union-Find Sets)并查集:(union-find sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多。一般采取树形结构来存储并查集,并利用一个rank数组来存储集合的深度下界,在查找操作时进行路径压缩使后续的查找操作加速。这样优化实现的并查集,空间复杂度为O(N),建立一个集合的时间复杂度为O(1),N次合转载 2009-08-14 21:17:00 · 2512 阅读 · 0 评论 -
求大数的阶乘和末尾0个数的计算
求N的阶层的代码:#include using namespace std; int high;int res[10000];//1000的阶乘显然不可能超过3000位十进制数。void JC(int n){ int i,j; for(i=1;i<=n;i++) {原创 2009-07-29 22:44:00 · 2399 阅读 · 1 评论 -
KMP算法
//字符串匹配的KMP算法#include #include using namespace std;#define N 100void GetNext(char *str,int *next){ next[0]=-1; int k=-1; int j=0; int len=strlen(str); while (j<len) { if(k==原创 2009-07-29 23:25:00 · 435 阅读 · 0 评论 -
关于二叉树的全解
#include struct Tree{ char elem; Tree *lchild,*rchild;};void GreatTree(Tree *&b){ char ch; scanf("%c",&ch); if(ch==$) b=NULL; else { b=new Tree; b->elem=ch; Great原创 2009-08-04 09:32:00 · 622 阅读 · 0 评论 -
求大数的阶乘和末尾0个数的计算
求N的阶乘的代码:#include using namespace std; int high;int res[10000];//1000的阶乘显然不可能超过3000位十进制数。void JC(int n){ int i,j; for(i=1;i<=n;i++) {原创 2009-08-04 11:25:00 · 962 阅读 · 0 评论 -
DBS和 DFS邻接矩阵的算法
#include #include #include #define MaxVertex 100//最大顶点数 using namespace std; int visited[MaxVertex]; int visited1[MaxVertex]; ifstream cin1("Graph.txt"); struct MGraph { char v原创 2009-07-31 09:48:00 · 1514 阅读 · 0 评论 -
Floyd算法
Floyd算法是求每两点之间的最短路径核心代码: for(k=0;k<m;k++) for(p=0;p<m;p++) for(q=0;q<m;q++) if(a[p][q]>a[p][k]+a[k][q]) a[p][q]=a[p][k]+a[k][q原创 2009-08-04 11:20:00 · 374 阅读 · 0 评论 -
求素数的算法(附:malloc函数的介绍)
#include #include #include #include #define N 100// 简单试除判断法 int SimpleDivisionV1(int n){ int i,j; // 素数数量统计 int count = 0; //原创 2009-08-04 11:23:00 · 754 阅读 · 0 评论 -
欧拉大定理
欧拉公式 简单多面体的顶点数v、面数f及棱数e间有关系 v+f-e=2 这个公式叫欧拉公式。公式描述了简单多面体顶点数、面数、棱数特有的规律。 认识欧拉 欧拉,瑞士数学家,13岁进巴塞尔大学读书,得到著名数学家贝努利的精心指导.欧拉是科学史上最多产的一位杰出的数学家,他从19岁开始发表论文,直到76岁,他那不倦的一生,共写下了886本书籍和论文,其中在世时发表了700转载 2009-08-04 11:45:00 · 1137 阅读 · 0 评论 -
二分法的知识整理和代码的实现
数学方面: 一般地,对于函数f(x),如果存在实数c,当x=c时f(c)=0,那么把x=c叫做函数f(x)的零点。 解方程即要求f(x)的所有零点。 先找到a、b,使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2], 现在假设f(a)0,a ①如果f[(a+b)/2]=0,该点就是零点, 如果f[(a+b)/2]a,从①转载 2009-08-04 16:41:00 · 865 阅读 · 0 评论 -
Prim算法的两种写法
方法一: #include #include #define MAX 100#define MAXCOST 10000int sum;void Prim(int graph[][MAX],int n){ int i,j,k,min; int lowcost[MAX]; int adjvex[MAX]; for(i=1;i<n;i++) lowc原创 2009-08-08 09:32:00 · 715 阅读 · 0 评论 -
最长公共子序列【线段树版的LCS】
<br />#include<iostream>#include<cstring>#include<algorithm>#include<vector>#define N 200008#define Musing namespace std;int hash1[N], hash2[N], x[N], y[N], dp[N], next1[N], next2[N];vector <int> v[N];struct LTree{ int a, b,原创 2010-08-13 09:15:00 · 707 阅读 · 0 评论