- 博客(104)
- 资源 (35)
- 收藏
- 关注
转载 配置Vim——自动缩进(C/C++)
在当前用户目录下新建一个.vimrc的隐藏文件,在文件中加入以下几行代码:set autoindent //自动缩进set cindent //C自动缩进set shiftwidth=4 //自动缩进空白字符个数set softtabstop=4 //tab键的一个制表符,如果softtabstop=5,tabstop=4,则tab是1个制表符加1个空格的混合set tab
2015-08-17 10:42:39
18375
4
原创 Java多线程总结笔记(三)—— 同步和锁机制、synchronized
(一)JVM实现锁机制在Java虚拟机中,理论上每个对象和类(class对象)都关联了一把锁.要实现互斥(mutual exclusion)锁功能, 每个锁(lock,有时称为mutex)关联到每个对象/类.在操作系统书籍中这叫做信号量(semaphore),互斥锁(mutex)是一个二进制信号量.如果某个线程持有了一个锁的某些资源,那么其他所有线程都不能获得这个锁及相关的资源,除
2015-08-16 10:42:47
676
原创 Java多线程总结笔记(二)—— 线程各状态及转换
线程状态类型1. 新建状态(New):新创建了一个线程对象。2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,
2015-08-15 17:18:58
666
原创 Java多线程总结笔记(一)
Java多线程与JVM原理:Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。 一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单
2015-08-15 17:00:39
668
转载 MySQL 存储过程的基本用法
mysql存储过程详解1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。一个存储过程是一个可编程的函数,它在数据库中创建并保存
2014-03-29 14:48:16
852
转载 LPCTSTR,LPWSTR, PTSTR, LPTSTR区别
L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。即win32中,long,near,far指针与普通指针没有区别,LP与P是等效的。P表示这是一个指针。T表示_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNIC
2014-03-24 20:17:42
10003
转载 Windows下多线程编程指南
Windows多线程编程总结关键字:多线程 线程同步 线程池 内核对象1 内核对象1 .1内核对象的概念内核对象是内核分配的一个内存块,这种内存块是一个数据结构,表示内核对象的各种特征。并且只能由内核来访问。应用程序若需要访问内核对象,需要通过操作系统提供的函数来进行,不能直接访问内核对象(Windows从安全性方面来考虑的)。内核对象通过Create*来创建,返回一个用于
2014-03-23 23:15:51
631
原创 UVa UVA 10891 Game of Sum (区间DP)
/*** 挺水的区间DP* dp[i][j] 表示该轮选手在还剩[i,j]的数中按规则选取所能得到的最大收益* 最大收益也就是相对于当前选手最优决策后在区间[i,j]中使得两选手的差值最大。* 这样dp[1][n]其实就是所要的答案。* 如何求dp[1][n],其实就是个区间dp,从小范围算起到最后1-n范围。* 再用个sum[n]数组记录前n项和,方
2014-01-20 14:17:54
677
原创 HDU 2089 数位dp (简单)
/*** 数位DP:* 和HDU 3555类似,稍微复杂了点点,不同在于,* 一、多考虑4的情况* 二、因为子串是“62” 而3555的子串“49” 末尾数字不同* 所以这题要多加一种情况if(num[i] > 2 && last == 6) //last 表示前一位数num[i+1]* 状态还是一样:* dp[i][0] 表示所有不含不吉利的数开头任意
2014-01-14 12:11:35
819
原创 HDU 3555 数位DP 入门
/*** 数位dp:* 和hdu 2089 类似,不过这个其实更简单。* 不过有一点不同的是,在计数的时候,因为要找的是子串“49”,* 所以不需要考虑在if(num[i] > 9 && last == 4) 的情况* 而hdu 2089的子串是“62”,也就是当在if(num[i] > 2 && last == 6)情况的时候* 仍需考虑num[i] >
2014-01-14 12:10:22
637
原创 ural 1057 Amount of degrees 数位DP (入门)
/*** 数位dp:* 第一道数位dp题,还是看《浅谈数位类统计问题》看到的题,* 关于数位dp的理解,理解那棵完全二叉树就很容易理解了。* 关键是对于非二进制的计数是如何根据二进制得出来的dp去计算的,、* 拿5进制来说,比如 40132, bit[5] = {4,0,1,3,2} * bit[len-1] = 4, 实现的时候逆序遍历: i =
2014-01-11 10:45:59
773
原创 POJ A Simple Problem with Integers (Splay 伸展树 入门)
/*** Splay 2657 ms* 刚入手 splay,这题做第三遍了。 先是线段树,然后树状数组,这次Splay* 写的挺顺,也1A。就是手有点抽筋 -__-。。* 算入门题吧,不过树状数组那思路挺不错的。* 这次就记splay,如果是用splay的话就大水了。 不过效率也低,比线段树还低。* 思路的话,就是用splay维护个sum域,再打个laz
2013-10-23 21:02:18
734
原创 HDU 3874 Necklace 树状数组 + 离线处理
/*** 树状数组 + 离线: * 看人题解的,思路: 把询问区间[l, r]存下后按r从小到大排序* 用数组hash[i]记录数字i最后一次出现的位置。用变量curR从1开始每次* 往右扫到每个询问区间的r。关键在于没扫到新的一个数的时候,如何更新* 维护这个树状数组。把每次询问的答案记录到ans数组。* 具体: 当前数num[curR]如果出现过,则最后一
2013-10-18 23:44:45
726
原创 POJ 2777 Count Color 线段树 + lazy标记
/*** 线段树 + lazy标记* 维护区间所含颜色种数,依题种数小于30,很容易想到用位压缩记录状态,* 在更新的时候用 按位与(a | b) 就能合并两个区间所有的颜色,询问的时候返回* 区间所记录的颜色种数(一个int型的数),返回后,再计算各位上含1的个数即为种数。* 规定第i种颜色为(1<<i)* 其次是更新,用个lazy标记表示是否整
2013-10-12 22:43:33
743
原创 Uva 11020 Efficient Solutions (set的应用)
set也是个好东西,先贴set基本操作吧。。set的基本操作:begin() 返回指向第一个元素的迭代器clear() 清除所有元素count() 返回某个值元素的个数empty() 如果集合为空,返回trueend() 返回指向最后一个元素的迭代器equ
2013-10-12 16:51:22
1309
原创 HDU 4318 Power transmission 最长路 (dijkstra + 优先队列) 水
/*** 水最长路:* 题目要求损失量,不过可以转换成残留量,求最长路。* 用的是优先队列优化的dijkstra,不优化的话,O(n^2)的估计会T* 具体思路就是:先转换边权,把损失百分比转换成剩余百分比。。就是100%-x%* 在找最长路的时候就是不断相乘,因为百分比不会超过100%所以dijkstra用优先队列* 优化的思想是成立的。*/#i
2013-10-04 23:21:49
1813
原创 POJ 1141 Brackets Sequence (DP+路径处理)
/*** 挺不错的DP题,黑书dp专题第一例。* 输出搞了近一个小时的输出,结果发现不是输出的问题,* 是在处理pos和dp数组的时候更新dp用的是dp[.]=min(dp[.],dp[..])的形式。* 忽略了pos[i][j]的更新应该在满足dp[..] < dp[.]的时候才更新的* 所以建议还是少用min去更新,避免遗漏还是if(dp[.]>dp[..
2013-09-30 22:30:33
709
原创 POJ 1716 Integer Intervals 差分约束(入门)
/*** 差分约束:* 刚接触差分约束的确很纠结。。* 差分约束系统的题其实是研究题目的约束条件,再根据最短路在松弛边的时候的固有性质来理解的。* 就如这题,由题目意思有如下约束条件:* dis[u]表示u-1之前所取的关键点的数, 对于边(i, i+1)有* 1、dis[i+1] - dis[i] >= 0* 2、dis[
2013-09-21 23:06:50
772
原创 POJ 3159 Candies 差分约束 spfa+栈+邻接表
/*** 很水的一道差分约束题: (STL就TLE)* 开始不看discuss T了n次,看了discuss说要用栈。。改用栈还是T* 最后手写栈和邻接表。。完全抛弃STL,最后C++ 500+MS G++ 700+MS* 其实清楚理解了差分约束系统之后且能够看出题目考的是这类的,都挺水。* 题目说明 snoopy and flymouse were
2013-09-20 16:54:29
842
原创 UVa 558 Wormholes 判断负权环 对比bellman-ford和spfa效率
第一个居然是spfa第二个才是bellman-ford/*** 又是大水。。再来测试测试bellman-ford和spfa的效率。。* 居然。。。bellman-ford比spfa要快好多。。。 求解释?* 附加floyd判负权环。其实原来和bellman一样。*/#include #include #include #include #incl
2013-09-19 22:04:16
1129
1
原创 UVa 10986 Sending email 优先队列优化的dijkstra 和 朴素dijkstra 效率对比
/*** 原来是想把这题用来dijkstra练手的,突然到不如来测测dijkstra用优先队列优化之后效率的变化情况* 本想如果优化效果不是很明显的话,就无所谓用哪个了。。结果。。。这题居然。。。不优化就T !!* 直接上代码了。。dijkstra()是朴素的 dijkstra_q() 是优先队列优化后的。*/#include #include #include #
2013-09-18 22:32:56
831
原创 POJ 2117 Electricity (tarjan)删割点后求块数
/*** tarjan: 求一个图中删除一个割点后所得到的最大块数。* 在用tarjan去遍历每个结点的时候,判断割点是如何判断的?* low[v] >= dfn[u] (这里注意不要和求割边混淆)* 求割边的时候,是以low[v] > dfn[u]. 这个其实可以画下图就很好理解了。* 割点的定义是,删除该结点以及和该结点相关联的边。* 所以用lo
2013-09-18 20:38:21
641
原创 UVa 658 It's not a Bug, it's a Feature! 位运算技巧+dijkstra优先队列优化
/*** 我真服了。 UVa 数组越界只返回WA,不给RE 这题debug了两天,WA了两天* 最后发现就是数组越界的问题!!* 做这题学了个很不错的位运算技巧:* 这样写下来时间还是比较多,后来看了别人的解题报告,发现在判定当前状态是否可以转换的时候可以直接用位运算去操作: ①判定某些位置是否为1,如判定2、4位置为1,则转化为判断x|0101是否等于x
2013-09-15 21:33:01
853
原创 HDOJ 2955 Robberies 简单01背包+简单概率思想
/*** 与其说这题考背包,不如说考概率。* 比较容易想到的是,把被抓到的概率乘100,加卡精度来做背包容量,钱就做背包价值* 可是不行! 这精度卡不了诶。。还是wa* 换种想法,题目给出的被抓的概率p,那(1-p)就是不被抓的概率。* 然而,让dp[i]表示抢到i百万的逃跑成功率。 那么如何计算?* 如果要抢到i百万需要抢n个银行,那么就是抢这
2013-09-13 23:32:59
888
原创 UVa 10048 - Audiophobia 简单Floyd
/*** 好久没写题解了。。。要么都是大水题。。要么太难了没来得及补 T^T* 今天上个大水吧。。表示我还活着 -_-* 简单Floyd:* 只不过dis[i][j] 表示的是 i->j的路上最大权的最小值。* 只要在floyd上稍作修改。。就是裸地floyd。。*/#include #include #include #include #incl
2013-09-07 21:35:51
621
原创 POJ 2063 Investment 完全背包
/*** 多重背包:* 这题很裸的多重背包。不过居然还各种RE和WA。。。* 首先是RE: 因为每次都会有利息,加上原来的本金之后的资金肯定是会大于原来的最大值。* 数组开大个5倍就够了。 因为题意是利息不超过10%,年数不超过40.这个随便算下,或者开个足够大就行。* 其次WA的原因:因为我在实现的时候,用了个变量extra去存不足1000的部分。而
2013-08-22 23:52:36
630
原创 HDU 3339 In Action 最短路(dijkstra) + 裸01背包
/*** dijkstra + 01背包: A的有点吃力呐。。但至少没看题解吧* 一开始也是理解错题意了。 以为就是一辆坦克。经过station就行。还去记录了path,为了算power大于一半* 其实不是的,有足够辆坦克,一个坦克占领一个,必须是stop here。 占领其他station就要用其他坦克了* 其实也不难想。。用dijkstra求出单起始源到各
2013-08-15 23:24:36
652
转载 ACM——Java
ACM中java的使用 这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。1. 输入:格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in));例程:import java.io.*;
2013-08-14 16:45:50
1324
原创 Floyd算法(改进后求最小环权值)
int gra[MAXS][MAXS], dis[MAXS][MAXS];/** 返回值为最小环权值. */int Floyd(int n) { int minCircle = INF; /** 改进后的Floyd可求最小环。minCircle用于记录最小环权值。 */ for(int k = 0; k < n; k ++) { /** 改进部分 求最小
2013-08-14 16:40:59
2010
原创 HDU 1598 find the most comfortable road 枚举 + kruskal算法
/*** 枚举 + kruskal:* 因为要找的是一条路的最大值减最小值。 就可以利用kruskal的贪心思想。* 把所有边按权从小到大(从大到小其实都一样)排序。然后一一枚举,找出所有能使得x和y连通的路径。* 再在这些路径中找一个舒适度最高的,也就得出答案了。* 对于这题来说,生成树是不定的,也就是说,只要在贪心的过程中,有x和y在同一集合中,
2013-08-13 19:55:08
607
原创 HDU 1385 Minimum Transport Cost (Floyd算法 + 路径输出)
/*** Floyd + 路径输出 :* 挺裸的一题求两顶点最多路。 除了要注意当路径有多条具有相同最短路径的时候,* 按字典序输出。。* 这题挺坑的: 首先数据坑,题目也没说明。 当询问的是a到a本身的话* 是输出 Path: a 还是Path: a-->a (正确答案应该是前者)* 思路: 呃。。。上来直接Floyd吧。。*
2013-08-11 14:51:12
2578
原创 POJ 2828 Buy Tickets 线段树
/*** 线段树: * 每个节点维护的num表示:该区间还剩多少个空位。* 插入的pos等于前面需要预留的位置数。* 首先看插入过程。最后一个插入的元素的位置是多少,位置就是多少。* 也就是说不会再改变。* 如果按照顺序从前往后插,第一个插2,第二个也插2,则第一个相当于被往后挤了。* 这样就难以维护一个区间,因为第一个节点已经被插
2013-08-11 07:16:03
606
原创 poj 1252 Euro Efficiency 简单BFS
/*** 简单BFS: 可是WA了7次,最后在绝望之下把G++ 换C++ 居然A了。。A了 * 题意:给你6中不同的货币, 去用最佳方案(用最少的个数)去凑 1-100 的币值(可加可减)* 可加可减就是说: 比如你要换67的币值, 手头有70 和 3 面值货币。就可以给70找3所以最少需要2个货币。* 题目输出就是 凑出 1-100的面值的最佳方案的平均值。 和最佳方案中
2013-08-10 20:59:01
979
原创 HDOJ 2066 一个人的旅行 (多次求单源最短路径)
/*** 还是最短路: 还是dijkstra* 但是! 按题意说的草儿一开始的城市,是一个可以用0的时间到输入给的几个出发城市的。* 说白了,就是给你一堆源点,让你依次dijkstra。。就这样!* 千万不能把草儿的家乡看做源点只进行一次dijkstra。* 这样的话相当于源点到几个出发城市的距离都是0,如果只进行一次dijkstra会怎样?* 因为
2013-08-07 17:05:00
1237
原创 POJ 1125 Stockbroker Grapevine (Dijkstra求所有点的单源最短路径)
/*** Dijkstra: 其实这题可以用floy的。。写惯了dijkstra。就。。* 理解了题意应该就可以A了,这题数据太太太水了。。我那种不连通的情况完全没有考虑也A了。* * 题意: 直接抄discuss了。* 首先,题目可能有多组测试数据,每个测试数据的第一行为经纪人数量N(当N=0时,* 输入数据结束),然后接下来N行描述第i(1<=i<=N
2013-08-07 16:36:41
929
原创 POJ 1236 Network Of Schools ( tarjan求强连通分量 + 缩点成DAG图 )
/*** tarjan + 缩点:* 这题题意其实就是求:强连通分量数(task1) 和 在对强连通分量缩点后形成的* DAG图加至少多少条边,能使其成为一个强连通图(也就是题目所说的任何一个点出* 去都能到图中任何一个点。)* 怎么算强连通分量,怎么缩点。 其实tarjan算法就行,理解tarjan后,把所有点* 都可以用数组belong去分
2013-08-07 08:23:41
1216
原创 POJ 1062 枚举单源最短路径(dijkstra算法)
/*** dijkstra : * 这题题目有点坑: 说的是等级高的不愿和等级低的间接接触,没有说等级低的不愿和等级高的间接接触。* 比如: 有三个人 A level: 3 B level: 4 C level: 5 如果B先和A接触,C不愿和A接触,而B先和C接触,A也不愿和B接触。* 既然是这样的话,就只能多个设定了。而且要对各定点进行枚举。* 首
2013-08-04 18:47:51
815
原创 POJ 1258 Agri-Net 最小生成树(Kruskal算法入门)
/*** 最小生成树(入门) Kruskal算法:* 这题输入的数据其实有一半一上是根本不需要存的。因为依题意这是个无向图* 而且看样例也看得出,对角线及以下(或以上)都是可以省去的。* 这样在存数据的时候直接存当j > i的时候(也就是上三角的数据),都将数据* 存到nodes[]中,node表示边,存两点和权值。* 根据Kruskal算法,
2013-08-03 10:32:17
767
原创 拓扑排序
先上百科: http://baike.baidu.com/view/288212.htm 拓扑排序就是 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 首先熟悉是怎么实现的:拓扑排序方法如下:
2013-08-02 23:12:05
844
原创 HDOJ 1198 Farm Irrigation 并查集
/*** 并查集(简单):* 这题麻烦在各种方向的设定,其实用到的并查集很少,就是最后算集合数的* 方向设定好后,直接扫一遍n*m的图,对当前位置的处理就是 对可延伸方向(也就是水管能到下个方块的方向)* 的相邻方块判断,如果该延伸方向的水管同样能延伸过来,就把这两个方块的根节点合并起来。* 其实也就是并查集最基础的应用了。* 等扫完一遍图后,再去算
2013-08-01 20:03:08
1132
ACM培训资料
2013-03-16
上海交通大学全计算机专业课程教学视频]+中山大学汇编[AVI]
2013-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人