void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2012年2月1日

摘要: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储。例如:我们常用的操作就是对数据排序,优先队列默认的是数据大的优先级高所以我们无论按照什么顺序push一堆数,最终在队列里总是top出最大的元素。用法:示例:将元素5,3,2,4,6依次push到优先队列中,print其输出。1.标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。priority_queue<int> pq;通过<操作符可知在整数中元素大的优先级高。故示例1中输出结果为: 6 阅读全文
posted @ 2012-02-01 23:51 void-man 阅读(59596) 评论(1) 推荐(5) 编辑

2012年1月19日

摘要: 1 #include <iostream> 2 #include <cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxlen=1000010; 6 long long eul[maxlen]; 7 int pri[maxlen],f[maxlen],isprim[maxlen],p=0; 8 inline void get_prim(){ // 线性筛素数 9 memset(isprim,1,sizeof(isprim));10 for(int i=2;i<maxlen; 阅读全文
posted @ 2012-01-19 23:40 void-man 阅读(3188) 评论(0) 推荐(0) 编辑

2011年12月15日

摘要: timestamp时间戳,插入时候默认返回当前时间内部存储以二进制方式,两者相减得到的不是秒数,如果想要获得两个时间戳之间的差值,网上搜了很多办法都挺麻烦的!!linux下的c操作起来也不是很方便,如果sql能直接select出来是整数就好了,这样写起c来说比较方便一点;1:先把时间戳转换成datatime的格式,然后相减2: bind()方式,不是太懂后来偶然间看到一个人的blog说了一种办法,忒方便了!把timestamp直接转换成unix_timestamp格式,然后再相减的话得到的就是两个日期之间相差的秒数了create table tm(start timestamp,end tim 阅读全文
posted @ 2011-12-15 13:27 void-man 阅读(1146) 评论(0) 推荐(0) 编辑

2011年8月26日

摘要: 一直不知道差分约束是什么类型题目,最近在写最短路问题就顺带看了下,原来就是给出一些形如x-y<=b不等式的约束,问你是否满足有解的问题好神奇的是这类问题竟然可以转换成图论里的最短路径问题,下面开始详细介绍下比如给出三个不等式,b-a<=k1,c-b<=k2,c-a<=k3,求出c-a的最大值,我们可以把a,b,c转换成三个点,k1,k2,k3是边上的权,如图由题我们可以得知,这个有向图中,由题b-a<=k1,c-b<=k2,得出c-a<=k1+k2,因此比较k1+k2和k3的大小,求出最小的就是c-a的最大值了根据以上的解法,我们可能会猜到求解过程实际 阅读全文
posted @ 2011-08-26 00:31 void-man 阅读(16707) 评论(10) 推荐(23) 编辑

2011年8月2日

摘要: 其实学汇编主要原因就是想了解下内联编译中的c/c++嵌入汇编,总体来说了解了一些基本的指令,什么加减移位之类的嵌入汇编函数的返回值放在eax寄存器里eax寄存器32位通用寄存器。 EAX寄存器以称为累加器,AX寄存器是算术运算的主要寄存器,所有的输入、输出只使用AL或AX人作为数据寄存器。在80386及其以上的微处理器中,EAX寄存器可以用来存储单元的偏移地址。EAX可称为数据寄存器,你除了直接访问外,还可分别对其高十六位和低十六位进行访问。它们的低十六位就是把它们前边儿的E去掉,即EAX的低十六位就是AX。而且它们的低十六位又可以分别进行八位访问,也就是说,AX还可以再进行分解,即AX还可分 阅读全文
posted @ 2011-08-02 13:01 void-man 阅读(604) 评论(0) 推荐(0) 编辑

2011年7月31日

摘要: 假期任务挺多,但是一项也没有完成......现在发现学习一门新语言我总有急于求成的想法,可能是掌握了一两门语言后学习其他的语言比较快也就不愿意拘泥于细节了吧!假期想在acm闲暇时候搞一搞php也顺便了解下mysql,所以就开始了学习7.26开始拿起图书馆借的书看,我了解到php确实是c,c++,java的延伸,神马语法都很像,并且让我最舒服的就是php的变量定义特别爽,可以直接定义并且初始化,没有数据类型。爽的同时也有弊端,前期掌握不好规范,代码就会特别乱很难读懂然后掌握了一些关于php的基本脚本函数,还有表示规则 用dw编写的,比如,php脚本必须要以此种形式<?php ?>或者 阅读全文
posted @ 2011-07-31 14:05 void-man 阅读(898) 评论(0) 推荐(0) 编辑

2011年5月31日

摘要: 给定一个整数n,要找出n能拆分成多少种不同的若干个数的和与乘积的形式。比如: 4=4 12=1*12 4=1+3 12=2*6 4=2+2 12=3*4 4=1+1+2 12=2*2*3 4=1+1+1+1 先看加法形式,可以构造一个母函数F(x)=(1+x+x^2+...+x^n)(1+x^2+x^4+...+x^n)...(1+x^n),将这个母函数展开后,求出每一个x^k前面的系数Ck,就是对应的整数K有多少种拆分的形式。#include <iostream> using namespace std; const int MAXN = 120; int c1[MAXN+1], 阅读全文
posted @ 2011-05-31 23:56 void-man 阅读(1834) 评论(1) 推荐(0) 编辑

2011年5月8日

摘要: 这两种办法在文章部分已经都有提及,基本思想都是大数相加,一种是字符串相加,一种是数组保存位数第一种,字符串相加直接用一个字符串相加函数,计算结果保存到字符串数组中View Code 1 string operator +(const string s1,const string s2) 2 { 3 string s; 4 int l1=s1.size(),l2=s2.size(),i,j; 5 int a[1100]={0},k=0; 6 for(i=l1-1,j=l2-1;i>=0||j>=0;i--,j--,k++) 7 { 8 if(i>=0) 9 a[k]+=(s1[ 阅读全文
posted @ 2011-05-08 15:38 void-man 阅读(1082) 评论(0) 推荐(0) 编辑

摘要: 此类问题一般常用的有两种算法,时间复杂度分别是O(n^2)和O(nlogn)第一种,普通算法,用一个标记数组标记包括当前数的最长序列的长度,然后往前递归寻找,此类方法这里不多说了文章的dp问题里已经用过多次了下面着重介绍一下一种省时但是不常用的算法,整体思想是DP+二分搜索,用一个b[k]=m 来标记k长度的最长序列下,最小的数是m,比如有一序列 5 3 7 4首先b[1]=5,初始化长度为1的序列就是第一个数,接下来到3的时候,3独立的长度为1的序列小于5,所以b[1]=3,那么b[2]=4 因为长度为2的序列有两个5-7,3-7,3-4,期中序列最大的数最小的就是4了因此,寻找大于当前数的 阅读全文
posted @ 2011-05-08 14:16 void-man 阅读(558) 评论(0) 推荐(1) 编辑

2011年5月2日

摘要: 字符串搜索标记可以用异或来处理。这样避免了大批字符串超时等等的可能hoj1361题,给出的是输入n个(n灰常大)字符串,然后再输入n-1个,问另外一个没输入的是什么??如果一个一个搜索去标记太麻烦了,字符串hash也过于繁琐,在这里字符串异或就起作用了把每个字符串的各个位都取异或,那么最后的结果就是没有输入的那个了1 memset(s2,'\0',sizeof(s2)); 2 while(1){3 scanf("%s",s1);4 for(int i=0;i<strlen(s1);i++)5 s2[i]^=s1[i];6 } 7 printf(&quo 阅读全文
posted @ 2011-05-02 23:12 void-man 阅读(942) 评论(0) 推荐(0) 编辑