- 博客(41)
- 收藏
- 关注
原创 Codeforces Round #214
A和B都是简单题C. Dima and Salad题意:给出n个a[i],再给出与a[i]对应的b[i],求一组序列,在sum(a[j]) = k * sum((b[j]) (1 思路:就是一个代价有负数的01背包,求代价刚好为0时的最大值。我们来看,如果代价全是非负数时,我们的代码: for(int i = 1;i <= n;i++) for(int v = max;v >=
2013-12-06 19:35:07 461
原创 最小树形图
最小树形定义:在向图中,通过某一个定点v,能访问到所有其它点,且使权值和最小。本文介绍的算法叫朱刘算法,是由两位中国人朱永津,刘振宏在1965所发明。算法的核心思想是除了定点外,每个点必有一条入边,贪心及缩点。它的步骤是:step1:从v点出发,检测是否能访问所有顶点。能,执行step2;否则不存在最小树形图,返回。step2:对于除定点v之外的所有点,找出它的最小入边pre[i]
2013-11-13 15:41:33 350
原创 Codeforces Round #208
A. Dima and Continuous Line题意:给定x轴上n个不同的点a[],将a[i]与a[i + 1]连成半圆,求这些半圆是否相交。思路:两个半圆相交,假设第一个半圆两点为x1 B. Dima and Text Messages题意:n个单词word1,word2,...,wordn,先变成思路:先将n个单词转化成C. Dima and Containers
2013-10-28 19:10:10 502
原创 拓扑排序
1、hdu 4324题目要求假如a到b没有边,那么b到a一定有边,且两点之间只可能有一条边。根据这个要求,我们可以知道,只要图中存在环,那么就一定存在3元环。那么,只要用拓扑排序删除入度为0的节点,计算剩下的节点就可以了。2、hdu 2647反向建边,要注意的是,如果a -> b,c -> b,那么要从a和c中选择一个最大的。这里点太多,需要用邻接表来表示。3、hdu 2497
2013-10-25 14:05:41 548
原创 第9天 内存管理
内存管理有内存分配和内存释放两部分。我们假设现在有128M内存可以使用,且将这些内存分块,每块为4KB,那么,共有32768个块。书中列举了两种方法来管理这些块。1、用char table[32768]来保存内存的分配情况,如果第i块用了,则char[i] = '1',否则为'0'class MEMBLOCKS{private: static const unsigned i
2013-10-18 18:53:27 478
原创 Codeforces Round #206(Div. 2)
A. Vasya and Digital Root题意:给定计算规则(1)S(n)为n的各位上的数字之和;(2)dr(n) = S(n), if S(n) ;(3)dr(n) = dr(S(n)), if S(n) ≥ 10。现输入一个k(1 思路:乍一看,好像很难,但不要忘了,它是只有500分的A题啊。我们注意到,d的范围是[0, 9],那么,我们可以分为以下两种情况考虑:
2013-10-14 16:39:25 1004
原创 第6天 分割编译与中断处理
今天我们来详细了解一下段结构体的各个属性及几个函数。struct SEGMENT_DESCRIPTOR{ short limit_low, base_low; char base_mid, access_right; char limit_high, base_high;};结构体SEGMENT_DESCRIPTOR就是段描述符,保存了段的基址,上限,权限等。各个属性的排列顺
2013-10-13 18:36:52 548
原创 第5天 结构体、文字显示与GDT/IDT初始化
1、分段GDT,IDT都是与CPU有关的设定。为了让操作系统能够使用32位模式,需要对CPU做各种设定。在汇编语言中,有一个指令叫做org。它指定了程序要装载的地址,而当CPU读到这段地址时,程序便会运行。现在的操作系统能同时运行多个程序,但如果出现内存的使用范围重叠了怎么办?必须让某个程序放弃执行,同时报出一个“内存冲突”的错误。但实际上是有某种方法能解决这个问题的。这个方法就是分段。
2013-10-13 14:14:07 897
原创 Codeforces Round #205
A:给定整数x,判断它是否能被表示成a + b = x,且a和b均为偶数。trick为x = 2的情况。B:贪心。先把sumTime按minTime分给每一天,如果不够分,则是NO;若有余,则剩余的按值maxTime - minTime按1 ~ d的顺序分,分完为YES;否则为NO。C:map计数D:
2013-10-11 22:02:57 498
原创 6: Initialization and Cleanup
1.constructorIn C++, the class designer can guarantee initialization of every object by providing a special function called the constructor whose name is the same as class's name.class A{pri
2013-10-08 15:26:42 496
原创 5: Hiding the Implementation
1.C++ access control(1). publicpublic means all member declarations that follow are available to everyone.(2) privateThe private keyword means that no one can access that member except you,
2013-10-08 14:28:16 508
原创 LCIS类模板
templateclass LCIS{private: static const short maxLength = 501; //序列的最大长度 unsigned short length1,length2; //分别表示seq1,seq2的长度 T seq1[maxLength],seq2[maxLength]; //源序列 unsigned short dp
2013-10-07 13:35:47 377
原创 4: Data Abstraction
1. What's an object?In C++, an object is just a variable, and the purest definition is "a region of storage" (this is a more specific way of saying:"an object must have a unique identifier," which i
2013-10-06 14:51:15 455
原创 Chapter 3: The C in C++ Creating functions
1.Introduction to data typesData types define the way you use storage(memory) in the programs you write. By specifying a data type, you tell the compiler how to create a particular piece of storage,
2013-10-03 23:06:20 448
原创 第4天 C语言与画面显示的练习
1、利用汇编来理解指针mov [0x7cff],12我们知道,上面这条语句是无法通过编译的,因为在指定内存时,不知道到底是BYTE、WORD、还是DWORD,所以我们要将其改成mov byte [0x7cff],12我们是这样来定义指针的:int *p;p = 0xa0000;*p = 12;int是4字节,那么p = 0xa0000就相当于mov
2013-09-27 15:28:23 578
原创 2: Making & Using Objects
The user-defined data type, or class, is what distinguishes C++ from traditional procedural languages.Declarations vs. definitionsIt's important to understand the difference between declarations a
2013-09-22 19:01:41 382
原创 第3天 进入32位模式并导入C语言
1、读盘昨天写的IPL并没有装载程序,今天我们来写一个可以真正装载程序的IPL。我们先来看软盘结构。如图所示。一张软件有正反两面,对应读取用的磁头(0,1),而从外到内又分为80个环(0~79),称为柱面。每个柱面又分为18个扇区(1~18)。因为软盘的第一个扇区(正面的第0个柱面的第1个扇区)为启动区,所以我们读软盘的时候应该从第2个扇区开始读。org 0x7c00jmp
2013-09-22 17:08:55 1095
原创 第2天
org 0x7c00 ;将程序加载到此处执行jmp entry ;跳转到entry;.....;中略;.....;核心程序entry: mov ax,0 mov ss,ax mov sp,0x7c00 mov ds,ax mov es,ax mov si,msg putloop: mov al,[si] add si,1 cmp al,0 je fi
2013-09-18 19:58:28 365
原创 第1天
启动区(boot sector):软盘的第一个扇区称为启动区。计算机读写软盘的时候,并不是一个字节一个字节地读写的,而是以512字节为一个单位进行读写。因此,软盘的512字节就称为一个扇区。那为什么第一个扇区称为启动区呢?因为计算机首先从最初的一个扇区开始读软盘,然后去检查这个扇区最后2个字节的内容。如果最后2个字节不是55AA,计算机会认为这张盘上没有所需要的启动程序,就会报一个不能启动的错误。
2013-09-14 14:24:27 782
原创 各种排序比较
集合num = {a1,a2,...an},将其按非递减排序。1、插入排序//increasingvoid insert_sort(int num[],int n){ for(int i = 1;i < n;i++) { int j = i,tmp = num[i]; for(;j && num[j - 1] > tmp;j--) num[j] = num[j -
2013-09-11 17:19:44 773
原创 多重背包
有n个物品,每个物品体积是costs = {c1,c2,...cn},每个物品的价值是values = {v1,v2,...vn},个数为nums = {m1,m2,...mn}。现在有体积为v的背包,问将这些物品放入该背包,能得到的最大价值是多少?我们可以将该问题转化为01背包求解,那么时间复杂度为O(nvs),s = m1 + m2 + ... + mn。那么,我们可以采用二进制的思想将时
2013-08-30 17:44:12 386
原创 完全背包
有n个物品,每个物品体积是costs = {c1,c2,...cn},每个物品的价值是values = {v1,v2,...vn},每个物品只能取无限次。现在有体积为v的背包,问将这些物品放入该背包,能得到的最大价值是多少?并输出最大时的选择方案。推导:设dp[i][j]为将前i个物品放入体积为j的背包时取得的最大价值。来看,dp[i][j]可由哪些状态得到?1、若第i个物品不放入背包,那
2013-08-29 16:20:45 344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人