- 博客(61)
- 收藏
- 关注
原创 《深入理解计算机系统》-第1章 计算机系统漫游
文章目录序1. 信息就是位+上下文2. 程序的不同格式3. 处理器读并解释存储在内存中的指令3.1 系统的硬件组成4. 运行hello程序4.1. 从磁盘读取hello命令4.2. 从磁盘加载可执行文件到主存4.3. 将输出字符串从存储器写到显示器 序 最近重启了写博客,都说念念不忘必有回响。自从上一遍博客,到现在已经过去了快两年的时间。在这期间一直在想着什么时候写个博客呀,什么时候再摸着键盘一点...
2019-03-16 22:19:20 2957 13
原创 Java volatile详解
我们知道volatile和synchronized可以解决java中的并发问题,那具体volatile的具体作用是什么呢?内部的原理又是什么?可以解决什么问题,不可以解决什么问题?
2017-04-06 18:45:21 704
原创 Java Collections
Java CollectionsJava Collection是Java的一个重要的部分,几乎所有的开发都会用到rt.jar包下面的集合类。 下面先看一下Java Collection的UML图(只画了其中的一常用的非Concurrent集合类)
2017-03-28 17:27:07 374
原创 Codevs 1378 选课
题意: (中文) 思路: 由于父子关系特别清晰,由于每个点都只有一个前驱,并且只有n个关系,那么可以判断他们的关系是一个森林。对于每个根,如果不选择根点,此根以后的所有的点都不选择;如果选择根点,那么剩下的m - 1 - (此根代表的树选择的课程数)就分给剩下的森林来选择。 那么我们把森林转换成二叉树会更方便编程,所以我们在存储的时候就把关系变成一个二叉树来表示,左儿子表示根节点的孩子,右儿
2015-05-10 19:18:47 520
原创 HDU 3357 Stock Chase
题意: 说有一些公司之间的收购股票关系,A收购B,B收购C,C收购A,那么第一条和第二条操作是允许的,第三条是被禁止的(因为这可能造成公司操控自己公司的股票)。问需要驳回多少条操作(就是被禁止的操作)。 思路: 那么,其实就可以转化成为一个图中添加一条有向边是否会形成环路的问题。而形成环的问题我们可以简化成两个点之间是否可达的问题。 比如如果a可达b,那么b收购a就是禁止的。 那么对于加入
2015-05-06 16:51:09 423
原创 HDU 3038 How Many Answers Are Wrong
题意: 有一个长度为n的数列,一共有m句话,每句话都有a,b,c,代表在[a,b]区间内的数的和。其中有一些话是真的,有一些话是假的(与原来的事实冲突的),问给出这些话中有几句是假的。 思路: 是一道并查集的题目。 其中用uf[n]代表n的父亲,用dis[n]代表n到uf[n]之间的数字之和。 那么对于f1 = find(a), f2 = find(b). 如果f1 < f2,那么会有两
2015-05-04 19:42:19 323
原创 HDU 1598 find the most comfortable road
题意: (中文) 思路: 由于只需要知道起点和重点之间的通路里面的最高和最低速度就可以了,那么我们按照速度从小到大利用并查集合并这条边连接的两个点为一个集合,通过并查集来判断要找的起点和重点是否连通了,如果连通就用当前的这条边速度减去添加的第一条边的速度,这个差就是此种方式的最大最小速度之差(因为是按照速度从小到大来添加的,那么当前的速度肯定是通路里面最大的)。遍历所有的情况就能找出最优的值。
2015-04-19 23:46:44 443
原创 HDU 1811 Rank of Tetris
题意: (中文) 思路: 把所有得分相同的选手放到同一个集合里面,然后对这些结合的关系进行拓扑排序,看是否可以存在一个完全的有向无环图。 1.利用并查集合并集合。 2.利用队列进行拓扑排序,如果队列里面的元素个数超过1个了,那么就说明此时信息缺失(因为这些队列里面的参赛选手都没有比它们大的了,他们之间的相互关系无法确定),如果最后入队的个数小于集合的个数,说明在图中有环,就是冲突了(因为环
2015-04-18 18:07:56 341
原创 HDU 1829 A Bug's Life
题意: 给你一种生物的交配信息,n个虫子,m种交配对(比如1 2,就是编号1的和编号2的交配),让你判断这里面是否有同性恋的。 思路 首先明确,如果a与b交配,b与c交配,那么a和c就应该是同性,应该在一个集合里面,如果不在,那么就会有同性恋。 那么用一个数组来记录与a交配的虫子的编号。 对于a与b交配,看a和b是否在同一个集合中,如果在,则有同性恋,否则,就把与a交配的虫子和c放入同一个
2015-04-15 00:10:00 365
原创 HDU 1069 Monkey and Banana
题意: 给你n种箱子的长、宽、高,他们可以一个摞另一个上面来组成一个塔,上面箱子的长宽必须严格小于下面箱子的长宽,每种箱子数量无限,问塔最高能达到多高。思路: 最开始以为是搜索,但是算了一下状态有太多,虽然可以存是否用过边,但是思路一直比较混乱。 其实把每种箱子当成3种箱子就可以,分别有3种不同的长宽组合,那么这3种箱子的价值就是高了。 把所有的箱子长宽组合遍历出来,然后再对长宽排从小到大排
2015-04-13 14:48:47 316
原创 HDU 1455 Sticks
题意: 给你n个不超过50的长度,它们是一根或多跟棍子(长度都相同)的一部分,求符合条件的棍子的最短长度。 思路: 这道题里面分组的思路真是经典,剪枝的思路也是很有趣。 首先从这些长度里面的最大的长度开始遍历(因为棍子的长度肯定不小于最大的长度),看这个长度的棍子是否能被组成。 至于具体剪枝看代码里面的注释吧。 Code:#include<cstring> #include<cstdli
2015-04-12 17:59:17 363
原创 HDU 1180 诡异的楼梯
题意: (中文) 思路: 由于每过1分钟,这个楼梯的通向就会变一次,要走楼梯时,判断一下已经走过的步数是否是偶数,如果是偶数,那么楼梯则没有变,否则,变换楼梯方向。判断一下当前是否可以走这个楼梯,可以走的话,步数就是当前步数+1,否则就是+2(等一分钟再走)。 但是,这里面如果用广搜的话,就会出现这样一个问题:第一个到达的那个点其实并不是最优的步数。例如: 3 4 T… *-*S *
2015-04-09 16:22:54 406
原创 HDU 2546 饭卡
题意: 说有一种饭卡的规定是这样的,只有在剩余钱数在5元或者5元以上才会购买成功,并且余额为负数也可以。 思路: 刚开始就想到了01背包,只要在求的时候限定一下就可以了,限定如果这个状态是小于5元的,上一个状态来源必须是大于5元的,然后求这个所有状态能达到的最大钱数。用本金减去这个钱数就是答案了。 排序使为了能使最大的钱数用在最后,这样的结果一定是最优的。 Code:#include<cs
2015-04-04 00:30:36 314
原创 HDU 1297 Children’s Queue
题意 有n个人站成一排,其中女生不能单独一个人站,男生:M、女生:F。就不能有例如:FM, MF, MFM这样的排列存在,问有多少种站队的方法。 思路: 其实也是一个递推。 f[i]代表排列i个人的合法序列。f[i] = f[i - 1] + f[i - 2] + f[i - 4]//i >= 51.在 i - 1合法序列后面加一个男生是合法的。 2.在以F结尾的 i - 1 合法序列后面
2015-03-31 18:32:02 323
原创 HDU 2563 统计问题
题意: (中文) 思路: 一个递推问题。 定义a[i]为第i步向上走的方法,b[i]为向左或向右的方法。 f[i] = a[i] + b[i]; a[i] = a[i - 1] + b[i - 1];向上走的方法可以来源于上步向上走的和向左或向右走的。 b[i] = 2 * a[i - 1] + b[i - 1].向左或向右走的可以来源于上步向上走的两次(因为上次向上走,这次可以选
2015-03-31 01:42:37 365
原创 HDU 2190 悼念512汶川大地震遇难同胞——重建希望小学
HDU 2190 悼念512汶川大地震遇难同胞——重建希望小学题意: (中文) 思路 考虑递推: 如果第i列是以1x1结尾的,那么就只有一种情况。 如果第i列是以2x2结尾的,那么有两种情况(在上面,和在下面)。 那么公式就为:f[i] = f[i - 1] + f[i - 2] * 2;//因为2x2的需要占用2列的位置,所以是f[i - 2]Code:#include<cstdio>
2015-03-31 00:55:21 383
原创 HDU 1133 Buy the Ticket
HDU 1133 Buy the Ticket题意: 有m个人只拿着50元的现金,有n个人只拿着100元的现金,票价50元。问有几种排队的方式,可以让售货员不用准备零钱就可以卖出所有的票。 思路: 我们可以把这道题的人分成两类,一种拿着50元的标记成0,另一种拿着100元的标记成1。 那么我们就可以得到一个长度为(n + m) 的01序列。 例如:0101 考虑这么一种情况 01101
2015-03-30 18:50:38 441
原创 HDU 3625 Examining the Rooms
HDU 3625 Examining the Rooms题意: 在标号为1~n的房间里面,每个房间里面都有一把标有序号的钥匙,分别唯一对应一个可以打开的房间号。现在有n个房间,你可以暴力破解(不用钥匙)打开k个房间,每当你进入一个房间,你就可以拿到房间里面的钥匙,但是唯有1号房间不能暴力破解,问你成功打开所有房间的概率是多少。 思路: 这是第一类斯特兰数的应用。 我们可以把破解其中一道门就可
2015-03-30 01:10:29 379
原创 HDU 1695 GCD
HDU 1695 GCD题意: 给你a, b, c, d, k. 求在[a, b]中找到一个x,[c, d]中找到一个y,求x和y的最大公约数是k的对数。 思路: 题目中说明要找的是最大公约数是k的两个数,那么我们把区间都除以k,再在剩下的这些区间找出两个互质的数,不就可以了么。可以把原问题分成两个部分。 第一部分:[1, b / k] 由于a和c都假定成1,而且需要按照x <= y来找
2015-03-27 19:40:40 368
原创 HDU 1104 Remainder
HDU 1104 Remainder题意: 给你N,M,K3个数,求N和M通过{ + , - , * , %}这些运算,最少能几步到达(N(最初的) + 1) % K 和 N(最终的) % K 相等。并输出每次的操作符。 比如+-* 就是 ((N + M) - M) * M,每次都用计算过的值进行计算。 思路: 由于最终结果都和K取余数,所以范围就是【-1000,1000】,直接进行广搜就可
2015-03-25 18:08:53 467
原创 POJ 3370
POJ 3370题意: 万圣节晚上,有c个孩子去要糖,总共有n户人家。但是每个孩子要分一样的糖,所以他们就选取了其中的几家。 求选出人家的编号。 思路: 这是一个鸽巢原理的应用。 设这n户人家的糖数分别为: A1, A2, A3, … ,An. 对它们取前n项和为: S1, S2, S3, … , Sn. 对前n项和每项对c取模为: M1, M2, M3, …, Mn; 其中如
2015-03-24 22:40:44 403
原创 HDU 1521 排列组合
HDU 1521 排列组合题意 (中文) 思路 此题是一道指数型母函数的题目, G(x) = (1 + x / 1! + x^2 / 2! + x^3 / 3! + …. + x^n1 / n1!) * (1 + x / 1 ! + x^2 / 2! + … + x^n2 / n2!) * … * (1 + x / 1! + x^2 / 2! + ..
2015-03-17 19:58:42 573
原创 POJ 1850 Code
POJ 1850 Code题意 给你一个序列,如果不是严格升序的序列就输出0,否则判断这个序列是第几位。 思路 分成两部分: 第一部分:先算长度小于次串的所有序列有多少个。其实就是一个排列组合,也就是C(26,n),n是串的长度。就是从26个字母里面选n个字母的组合。 第二部分: c[0], c[1], c[2],…,c[n]; 我们发现如果c[0]是a的话,那么后面就剩下25种选择的
2015-03-13 01:02:33 313
原创 POJ 3252 Round Numbers
POJ 3252 Round Numbers题意: 让你在给定的区间内找出,2进制数中0的个数不小于1的个数的数有多少个。 思路: 先研究2进制里面0的个数小于等于1的个数,比如12,二进制为:1100。 那么可以分为两个部分:小于1000的符合条件的个数、大于等于1000小于等于1100的符合条件的个数。 一:把小于1000的部分看成 3位二进制数、2位二进制数、1位二进制数的集合。
2015-03-11 19:18:13 434
原创 HDU 3397 Sequence operation
题意: 有3中操作: 0 a b 从a到b都置为0 1 a b 从a到b都置成1 2 a b 从a到b都进行异或 2中输出: 3 a b 输出从a到b的1的个数 4 a b 输出从a到b连续的1的个数 思路: 这道题可是坑蒙我了,断断续续能写了几个月。 最近才弄明白些,我原先的思路就是记录0和记录1的,然后异或就把1和0的信息进行互换。 后来才发现正解原来是只需要记一个数组f
2015-02-28 23:04:37 325
原创 POJ 1436 Horizontally Visible Segments
题意: 给你一些垂直于x轴的直线,给出这条直线的两个y坐标还有一个x坐标。 求有几组可以在水平方向上两两互相看见的三条线段。 ( 样例: 横坐标为1的、横坐标为2的(3,4)、横坐标为4的可以互相两两在水平面上看见 ) 思路: 由于是遮挡可以看成是覆盖,所以我们可以定义一个顺序进行覆盖, 可以从左到右,也可以从右到左,那我们从左到右进行染色。 对x坐标进行升序排列,然后从0-n
2014-11-06 17:39:16 407
原创 线段树模板
插点问线: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define TEST #define LL long long #define Mt(f, x) memset(f, x, s
2014-10-25 18:18:08 346
原创 Wikioi 1282 约瑟夫问题
题意: (中文) 思路: 由于数据量太大, 所以直接用线段树来做。 分成两种情况: 1.如果,现在位置后面有p个人可供数且p>= m,那么从此位置数出m个人就可以了。 2.后面有p个人可供数且p 细节方面: 第1种情况中,先进行查询,求出从此位置t到n,一共有p个人供数。 查询直接写成 从1 - n 第 sum - p + t 就可以了。 第二种情况中,如果取模的时候等于0,
2014-10-25 17:23:32 406
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人