自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

scf0920

退役ACMer渣

  • 博客(643)
  • 收藏
  • 关注

原创 《深入理解计算机系统第三版》第三章家庭作业参考答案

简述最近看docker和k8s的底层实现原理,严重感觉自己对底层的知识了解不足,于是开始业余时间深入看一些底层书籍,就找了本据说是理解整个计算机体系的入门书-《深入理解计算机系统》.直接买的最新的第三版,从第三章开始看的,第二章接下来有心情再看(看了几眼全是如何手算进制间计算之类的感觉用处不是很大)…由于第三版刚出不久,而且题目跟第二版的不一样,网上几乎没有答案。。。于是自己艰难的做完后,就打算把自

2017-08-24 23:16:21 43322 37

原创 Linux网络虚拟化:network namespace的学习

简介network namespace是linux内核提供的一个功能,是用来实现网络虚拟化的重要功能,可以创建多个相互隔离的网络空间,它们有独自的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。Docker的网络隔离实现便用到了该技术。 主要是实现方法是使用ip命令,由于需要修改系统的网络配置,因此需要使用root身份。 关于network namespace的命令都是使用

2017-07-04 00:21:19 1898

原创 爬虫实战(1):直播吧网站的赛程表

网站地址:直播吧 本来是想写糗事百科的。。但是不知道为什么总是被禁止。。于是就换了个直播吧。 本来以为直播吧的很好写。但是发现直播吧的源代码写的很混乱。相同的比赛,格式还不一样。。同是CBA比赛,有的带,有的不带,带 的是重点比赛。还有的会混着图片。时间大部分都用来处理这方面了。最终想到了用split方法来处理掉中间这些混着的空格,图片和 。 代码如下:import urllibimport

2015-12-18 09:26:20 1683 2

原创 python爬虫基础

下面是爬取网站源代码的代码,用的我们学校的教务处网站。。#!/usr/bin/env pythonimport urllibimport urllib2url = 'http://etc.sdut.edu.cn/eol/main.jsp'user_agent='Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko/20100101 Fire

2015-12-15 14:30:21 961

原创 python排序整理

1.list排序 这个很简单。直接用sorted函数即可。默认从小到大,若从大到小则在a后面加上reverse=1a=sorted(a)2.字典排序 这个就有点复杂a=sorted(a.items(),key=lambda e:e[x],reverse=1)若x为0,则是按键排列,若为1,则是按值排列。

2015-12-07 19:33:25 632

原创 python随机数整理

先是python的各种随机数 头文件:import random随机浮点数 x=random.uniform(a,b)随机整数x=random.randint(a,b)随机选取从a到b并按步长c递增的集合中的一个整数x=random.randrange(a,b,c)随机从集合里抽1个元素x=random.choice([...])随机从集合里抽取a个元素x=random.sample([...],

2015-12-06 19:46:30 858

原创 python读写文件脚本

输入文件名与文件内容并创建这个文件:(参考python核心编程P52)#/usr/bin/env pythonimport osls=os.linesepwhile True: fname=raw_input('input a filename\n') if os.path.exists(fname): print "ERROR: '%s' already exis

2015-12-06 15:52:17 767

原创 vim配置文件(持续更新

刚学会用vim,真的很强大很好用的感觉。自己写了一点配置文件,今后会持续更新。"vim环境变量设置set nu "显示行号set hlsearch "搜索时关键字高亮反白set backspace=2 "允许退格键删除set autoindent "自动缩进set showmode "显

2015-11-26 12:19:00 646

原创 HDU 3065 病毒侵袭持续中 (AC自动机)

题目地址:HDU 3065 裸的AC自动机。由于AC自动机的指针是不断回溯的,所以对于AA在AAA中算两次的问题完全不用担心,当在第二个A中+1后,指针会再次回溯到A上,然后当到第三个A的时候,会再记录一次。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algo

2015-11-06 19:36:21 643

原创 HDU 2896 病毒侵袭 (AC自动机)

题目地址:HDU 2896 AC自动机模板题。 记录每个终止节点的ID。然后在自动机里找就行了。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set

2015-11-05 21:23:27 487

原创 HDU 2222 Keywords Search (AC自动机)

题目地址:HDU 2222 AC自动机第一发!真好奇这些算法是怎么被发明的。。算法的魅力真是无穷。 这题是AC自动机模板题。自己实在写不出来,比着kuangbin的模板写的= = 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#includ

2015-11-05 20:35:01 446

原创 POJ 1226 Substrings (后缀数组)

题目地址:POJ 1226 将每一个字符串反转连接一次,再把所有字符串都连接起来,然后二分,找最大长度。注意与反转字符串之间不能直接相连。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include

2015-11-03 12:36:35 475

原创 POJ 3294 Life Forms (后缀数组)

题目地址:POJ 3294 把所有字符串连在一块,并用一个从未出现的字符隔开,注意这个每两个之间的用来隔开的字符也不能重复,除非对1个的时候进行特判。 然后二分长度,然后判断这个长度下能否有出现次数超过n/2次的,可以对其分组然后hash判断。找出最大长度之后,再用同样的方法从头找一遍,然后把符合要求的输出、 代码如下:#include <iostream>#

2015-11-02 23:36:28 559

原创 POJ 1743 Musical Theme (后缀数组)

题目地址:POJ 1743 二分长度,由于相似的都挨在一块,所以需要判断大于等于mid的区间的位置最左端与最右端是否大于mid. 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map

2015-11-02 21:12:59 532

原创 SPOJ 705 New Distinct Substrings (后缀数组)

后缀数组模板题。由于height数组是指与排名上一个的公共前缀,所以重复的个数是height[i]个,考虑当前这个字母所构成的子串的贡献即为n-sa[i]-height[i],然后累加即可。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#in

2015-11-02 19:47:57 584

原创 Ural 1297 Palindrome (后缀数组)

题目地址:Ural 1297 后缀数组模板题。把字符串倒过来接到字符串后面,并在中间加一个从未出现的字符。然后用后缀数组就可以了。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <ma

2015-11-02 19:06:10 576

原创 HDU 4313 Matrix (贪心)

题目地址:HDU 4313 利用最小生成树的思想,这里是从大往下删,能删则删,不能删就留着。用个并查集维护下。代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include

2015-10-30 16:15:59 509

原创 POJ 3261 Milk Patterns (后缀数组)

题目地址:POJ 3261 求出height数组之后,所求答案即是所有长度大于k的区间中最小height值的最大值。所以可以二分一下这个最大值,判断是否有存在长度大于k且最小值大于等于这个值得区间。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm

2015-10-29 20:42:13 446

原创 POJ 2774 Long Long Message (后缀数组)

题目地址:POJ 2774 后缀数组第一发!后缀数组真是太神奇了。。(好像每学一种新算法我都会这么说。。 原理研究了好长时间,还有代码的实现,论文作者罗穗骞的代码太简洁。。好难看懂QAQ,看了好长时间。 来一发后缀数组模板题,模板是用的倍增思想。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <

2015-10-29 19:48:25 540

原创 (CCPC F题)UESTC 1220 The Battle of Guandu (最短路)

题目地址:UESTC 1220 比赛的时候翻译完想了一小会就没再管。结果K题也没调试出来。。 这题是很神奇的图论题,建图方式是从y[i]到x[i]连一条有向边,权值为c[i]。然后将所有重要性为0的设为源点,然后跑最短路,结果就是所有重要性为2的点的最短距离。 实在是不好解释和证明这种建图的正确性。。有种只可意会不可言传的感觉。。需要仔细思考。

2015-10-27 21:20:17 924

原创 Codeforces Round #216 (Div. 2) E. Valera and Queries (树状数组)

题目地址:http://codeforces.com/contest/369/problem/E 看完题目,很明显是离散+树状数组的思路,然而并没有想到怎么离散。这题的解法实在巧妙。 这题要求的是至少有一个点包含的线段个数,可以利用容斥思想,找没有一个点包含的线段个数,用总个数减去它既可。这时还是不好求。 这里就有一个巧妙的方法,求点的补集,即一堆线段,然后求这些线段完全包含的给定的线段的个数

2015-10-21 08:54:39 753

原创 POJ 2155 Matrix (二维树状数组)

题目地址:POJ 2155 二维数组裸题。 对于更新操作,分别对(x1,y1)和(x2+1,y2+1)加1,对(x2+1,y1)和(x1,y2+1)减1.然后对于询问操作,求(0,0)至(x2,y2)的和。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algo

2015-10-07 20:30:46 471

原创 Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)

题目地址:http://codeforces.com/contest/551/problem/E 将n平均分成sqrt(n)块,对每一块从小到大排序,并设置一个整体偏移量。 修改操作:l~r区间内,对两端的块进行暴力处理,对中间的整体的块用整体偏移量标记增加了多少。时间复杂度: O(2*sqrt(n)+n/sqrt(n)). 查询操作:对每一块二分,查找y-整体偏移量。找到最左边的和最右边

2015-08-22 18:29:22 1131 4

原创 Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵快速幂)

题目地址:http://codeforces.com/contest/551/problem/D 分析下公式可以知道,相当于每一位上放0或者1使得最后成为0或者1,如果最后是0的话,那么所有相邻位一定不能全是1,因为如果有一对相邻位全为1,那么这两个的AND值为1,又因为OR值是只要有1,结果就为1,所以这位结果肯定为1,所以就推出了一个dp转移方程,dp[i][j]表示第i位上的数为j时的总个数

2015-08-21 09:58:15 977 4

原创 Codeforces Round #286 (Div. 1) B. Mr. Kitayuta's Technology (强连通分量)

题目地址:http://codeforces.com/contest/506/problem/B 先用强连通判环,然后转化成无向图,找无向图连通块,若一个有n个点的块内有强连通环,那么需要n条边,即正好首尾相连形成一条环,那么有了这个环之后,在这个块内的所有要求都能实现。如果没有强连通环,那么就是一棵树,那么只需要n-1条边即可。 代码如下:#include <iostream>#includ

2015-08-18 10:36:08 929

原创 Codeforces Round #284 (Div. 1) C. Array and Operations (最大流)

题目地址:http://codeforces.com/contest/498/problem/C 分别分解出每个数字的质因子,然后第奇数个数字的质因子在左边集合,偶数个数字的质因子在右边集合,建立源点和汇点,然后根据每个数字含有的质因子的个数建边,跑一遍最大流即可。 代码如下:#include <iostream>#include <string.h>#include <math.h>#i

2015-08-17 21:00:37 855

原创 Codeforces Round #316 (Div. 2) E. Pig and Palindromes (DP)

题目地址:http://codeforces.com/contest/570/problem/E 比赛的时候急着睡觉这题没看。。。 最显然的一个DP方法是dp[i][x1][y1][x2][y2]表示以s[x1][y1]和s[x2][y2]为第i步分别与s[1][1]和s[n][m]形成的回文串的个数,但是数组大小太大。。这时候可以发现知道步数后,y1和y2可以根据x1,x2来求出来,所以可以优

2015-08-17 15:32:42 898

原创 Codeforces Round #316 (Div. 2) D. Tree Requests (DFS序)

题目地址:http://codeforces.com/contest/570/problem/D 比赛的时候实在没想到DFS序,。。想到DFS序后,分别存起每个深度的所有节点的DFS序,处理出前缀异或和,然后二分找到两个端点,再异或一下,就求出了所求区间的异或和,由于偶数次的都被异或掉了,所以判断下奇数次数是否大于1即可。 代码如下:#include <iostream>#include <s

2015-08-17 10:21:15 1174 2

原创 light oj 1007 Mathematically Hard (欧拉函数)

题目地址:light oj 1007 第一发欧拉函数。 欧拉函数重要性质: 设a为N的质因数,若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N / a) * a;若(N % a == 0 && (N / a) % a != 0) 则有:E(N) = E(N / a) * (a - 1) 对于这题来说,首先卡MLE。。只能开一个数组。。所以把前缀和也存到

2015-08-10 09:53:22 1134

原创 Codeforces Round #303 (Div. 2) E. Paths and Trees (最短路+变形最小生成树)

题目地址:E. Paths and Trees 模拟了一场CF,这场实在太水了。。边玩边做的。。最后半分钟交了一发E题。。不幸AK绝杀失败。。。。 首先的思路肯定是先求最短路,把可能为最短路的边挑出来,然后第二步我本来写的是直接用无向图的最小生成树,于是绝杀失败。。。后来才发现这样是不行的。。因为边是有向边,而且每个点的入度要保证只有一个才行。于是我就把最小生成树的边弄成有向边,然后判定一下每个

2015-08-07 16:26:20 1127

原创 Codeforces Round #Pi (Div. 2) E. President and Roads (最短路+强连通求割边)

题目地址:codeforces #pi (DIV2) E 题目很水。。就是先求两边最短路,然后把可能为最短路的边挑出来,然后判断是否yes只需要转化成无向图跑一遍tarjan,找出割边,割边就是yes,然后剩下的边就让它的值为最短路-1就行了,如果-1后变成了非正数,就是no. 但是!!!居然卡spfa!!那是不是说cf以后就不能用可以卡的算法了。。完全可以出组数据来卡这些算法。。。比如spfa

2015-08-07 15:43:53 909 2

原创 HDU 1452 Happy 2004 (积性函数)

题目地址:HDU 1452 性质1 :如果 gcd(a,b)=1 则 S(a*b)= S(a)*S(b) 2004^X=4^X * 3^X *167^X S(2004^X)=S(2^(2X)) * S(3^X) * S(167^X)性质2 :如果 p 是素数 则 S(p^X)=1+p+p^2+…+p^X = (p^(X+1)-1)/(p-1) 因此:S(2004^X)=(2^(2X+1)-

2015-08-05 09:37:19 657

原创 2015 暑假集训14级第一周周赛解题报告

A.小模拟题 根据要求模拟即可。没什么可讲的。。 参考代码:http://paste.ubuntu.com/11978075/B.组合计数 首先排序,然后可以在O(n)复杂度内求出每个hero所能拿的sword的最大范围。 然后可以从第一个开始拿,考虑对于当前第i个hero来说,假设第i个hero最多能拿到第j个sword,那么首先这j个中一定有i-1个已经被前i-1个拿到了,所以第i个只能

2015-08-01 16:22:47 637

原创 HDU 4630 No Pain No Game (线段树离线查询)

题目地址:HDU 4630 这题一看数据范围,于是一直在思考n*logn的算法。。实在没想到好方法,找了找题解,发现都是用的n*sqrt(n)*logn的方法。。。算了算,这个复杂度的确可以过。。好吧。。 然后就可以先离线下来将询问按r值排序,然后枚举每个数,并且用sqrt(n)的方法枚举所有的约数,然后对于每个约数,对最近的一次出现的这个约数的地方进行更新。因为对于当前区间来讲,只要最近的这个

2015-07-28 10:37:24 825

原创 ZOJ 3886 Nico Number (线段树)

题目地址:ZJU 3886 这个题需要想到一点,因为对一个数x不断取模的话,而且设定他小于模才会进行取余操作的话,那么最多只会进行logx次,因为每次取模都会使x最少折半。然后想到了这点就很好做了。对于区间取模更新操作可以直接暴力更新,维护一个最大值,如果这个区间的最大值小于模的话, 就不用继续向叶子更新了。然后其他的大于模的就更新到叶子节点。 然后对于NicoNumber来说,只有6,2的幂次

2015-07-27 20:47:02 1011

原创 HDU 4628 Pieces (状压DP)

题目地址:HDU 4628 这题没想到怎么快速枚举子状态。。。看了题解才知道的。 用for(state=i;state>0;state=(state-1)&i)就可以了。 这题的具体做法是先预处理出所有的状态是不是回文串,然后就是普通的DP了。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <q

2015-07-25 15:49:56 687

原创 HDU 4638 Group (莫队算法||线段树离散查询)

题目地址:HDU 4638 先写了一发莫队,莫队可以水过。很简单的莫队,不多说。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#includ

2015-07-25 10:31:42 1569

原创 BZOJ 2038 小Z的袜子(hose) (莫队离线)

题目地址:BZOJ 2038 裸的莫队算法。 代码如下:#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>#inclu

2015-07-24 11:34:05 864

原创 HDU 5145 NPY and girls (莫队分块离线)

题目地址:HDU 5145 莫队真的好神奇。。这样的复杂度居然只有n*sqrt(n)。。。 裸的莫队分块,先离线,然后按左端点分块,按块数作为第一关键字排序,然后按r值作为第二关键字进行排序。都是从小到大,可以证明这样的复杂度只有n*sqrt(n)。然后进行块之间的转移。 代码如下:#include <iostream>#include <string.h>#include <math.h

2015-07-23 09:06:22 1262

原创 HDU 5016 Mart Master II (树上点分治)

题目地址:HDU 5016 先两遍DFS预处理出每个点距最近的基站的距离与基站的编号。 然后找重心,求出每个点距重心的距离,然后根据dis[x]+dis[y]#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#inc

2015-07-21 19:19:28 1407

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除