inline

NOI2018 归程

亡梦爱人 提交于 2020-02-18 08:28:27
传送门 这道题是一道非常好的Kurskal重构树入门题。 题目中“两点间存在一条边没有被淹没”等价于“存在一条路径,其最小边权(最低海拔)大于水位线”。有一个很显然的贪心策略,就是每次尝试加入边权大的边,直到两点连通;此时加入的边就是当前两点路径的最小值,也就是“最小边权”的最大值。如果这个最大值都小于等于当前海拔,那么所有两点间的路径一定都会被淹没。 这个过程等价于构造一棵最大生成树。而第一个使得两点连通的加入边就是我们需要求的“最小边权最大值”。 如何才能维护这些值呢?事实上,我们可以将这些值都变成一个个节点。当每次往生成树中加入一条边时,我们就将边的端点同时接到一个父节点上,父节点的点权为这条边的边权。 如果想要维护整棵树的信息,我们就需要在加入一条边的时候,将端点所属的连通块,而不是端点本身,同时接到一个点权为当前边权的父节点上。重复这个过程,我们就可以得到一棵新的树,它叫做“Kruskal重构树”。在这棵树上,两个叶子节点的 \(LCA\) 就是两点之间最小边权的最大值。 Kruskal重构树有些奇妙的性质。由于构造的顺序特殊,这棵树是一个标准的二叉堆。 回看这道题。我们先以海拔为边权,构造出重构树。在重构树上,如果一个点的点权 \(w(x)>p\) (当前水位线),那么以 \(x\) 为根的子树内,任意两点都可以开车来往。这是因为对子树内任意两点的 \(LCA\)

Kotlin代码进阶二

半腔热情 提交于 2020-02-17 17:45:54
Kotlin函数参数默认值 合并前: fun toast(string: String) { toast(string, Toast.LENGTH_SHORT) } fun toast(string: String, duration: Int) { Toast.makeText(BaseApplication.currentApplication, string, duration).show() } 合并后: @JvmOverloads fun toast(string: String, duration: Int = Toast.LENGTH_SHORT) { Toast.makeText(BaseApplication.currentApplication, string, duration).show() } 在Kotlin中调用,传一个参数或者两个参数,都可以调用 但是,如果在java代码中只能调用2个参数的方法,调用一个参数的方法报错,所以要加一个注解 @JvmOverloads Kotlin扩展函数 原函数: fun dp2px(dp: Float): Float { return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics) } 改为扩展函数: //扩展函数

ABBYY Cup 3.0 E3. Summer Homework

懵懂的女人 提交于 2020-02-16 21:56:10
对于 \(f_0=f_1=1\) 的斐波那契数列有一个性质 \[f_i=f_{i-k}*f_k+f_{i-k-1}*f_{k-1}, \forall k \in \left[1, i\right)\] 数学归纳法证一下 当 \(k=1\) 时, \(f_i=f_{i-1}*f_1+f_{i-2}*f_0=f_{i-1}+f_{i-2}\) \(k'=k\) 成立, 当 \(k'=k+1\) 时, \[\begin{aligned}f_i= &f_{i-k-1}*f_{k+1}+f_{i-k-2}*f_k \\= & f_{i-k-1}*(f_k+f_{k-1})+f_{i-k-2}*f_k \\=& f_{i-k-1}*f_{k-1}+f_{i-k-1}*f_k+f_{i-k-2}*f_k \\=&f_{i-k-1}*f_{k-1}+f_{i-k}*f_k \end{aligned}\] 对线段树每个节点维护区间长度 \(len\) , \(s_0= \sum\limits_{i=0}^{len-1}f_i * a_i\) , \(s_1=\sum\limits_{i=0}^{len-1}f_{i+1}*a_i\) 合并两个区间时 \[s_0=s_{lson, 0}+s_{rson, 0}*f_{len_{lson}-2}+s_{rson, 1}*f_{len_{lson}-1}\

2016.6.8测试

谁都会走 提交于 2020-02-15 06:02:38
1. ly的农场 【题目描述】 在农夫ly的农场里,有好多好多的奶牛,但是由于ly喂养得太好了,奶牛们越来越懒了,导致ly不得不采取些措施:要求它们每天早上晨跑,从A农场跑到B农场。从A农场到B农场中有n–2个路口,分别标上号,A农场为1号,B农场为n号,路口分别为2..n–1号,从A农场到B农场有很多条路径可以到达,而ly发现有的路口是必须经过的,即每条路径都经过的路口,ly要把它们记录下来,这样ly就可以先到那个路口,观察奶牛们有没有偷懒,而你的任务就是找出所有必经路口。 【输入文件】 第一行两个数n,m。 接下来m行,每行两个数u和v,表示路口u和v之间有路径直达。 输入数据保证必经路口一定存在,并且每个路口都和A,B农场直接或间接连通。 【输出文件】 第一行一个数m,表示必经路口数目。 接下来m行,按从小到大的顺序依次输出每个必经路口的编号。(不包括起点,终点) 【样例输入】 6 6 1 2 2 4 2 3 3 5 4 5 5 6 【样例输出】 2 2 5 【数据范围】 对于30%的数据,n ≤ 100,m ≤ 1000。 对于100%的数据,n ≤ 2000,m ≤ 8000。 正解:暴力。。。 解题报告:   考场上面打的是tarjan,实际上举得出反例。其实直接暴力枚举就可以了,每次遍历全图,看不经过某点是否可以到达终点。 1 //It is made by jump

x86平台inline hook原理和实现

隐身守侯 提交于 2020-02-14 10:55:53
概念 inline hook是一种通过修改机器码的方式来实现hook的技术。 原理 对于正常执行的程序,它的函数调用流程大概是这样的: 0x1000地址的call指令执行后跳转到0x3000地址处执行,执行完毕后再返回执行call指令的下一条指令。 我们在hook的时候,可能会读取或者修改call指令执行之前所压入栈的内容。那么,我们可以将call指令 替换 成jmp指令,jmp到我们自己编写的函数,在函数里call原来的函数,函数结束后再jmp回到原先call指令的下一条指令。如图: 通过修改机器码实现的inline hook,不仅不会破坏原本的程序逻辑,而且还能执行我们的代码,读写被hook的函数的数据。 inline hook流程 (1)寻找hook位置 我们hook的时候,会遇到不同类型的call,它们所占的字节可能是不一样的,本文构造一个长度为5字节的jmp指令(jmp的机器码占用1字节,跳转到的地址偏移占用4字节)来替换原来的5字节的call指令。即我们需要寻找长度为5字节的call,来进行inline hook。5字节的call形如: (2)inline hook代码实现 在x86汇编中,同样有很多类型的jmp,本文构造inline hook使用的是近距离地址跳转的jmp指令,它的机器码为 E9 ,这种类型的jmp指令需要一个参数,参数是 当前jmp指令地址 距离

2017-2018 ACM-ICPC Latin American Regional Programming Contest Solution

假装没事ソ 提交于 2020-02-12 20:27:52
A - Arranging tiles 留坑。 B - Buggy ICPC 题意:给出一个字符串,然后有两条规则,如果打出一个辅音字母,直接接在原字符串后面,如果打出一个元音字母,那么接在原来的字符串后面之后再翻转整个字符串,在这两条规则之下,求有多少种打印给定字符串的方法 思路:如果第一个字符是辅音,那么答案为0 如果全是辅音或全是元音,那么答案为1 如果只有一个辅音,答案为len 否则是最中间两个元音中间的辅音字符个数+1 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define N 100010 6 7 char s[N]; 8 9 bool vis[210]; 10 11 inline void Init() 12 { 13 vis['a'] = 1; 14 vis['e'] = 1; 15 vis['i'] = 1; 16 vis['o'] = 1; 17 vis['u'] = 1; 18 } 19 20 inline int work() 21 { 22 int len = strlen(s); 23 if (len == 1) return 1; 24 int cnt = 0; 25 for (int i = 0; i < len; ++i) if (vis[s[i]]) cnt++; 26 if

内联元素和行内元素的区别和理解

只谈情不闲聊 提交于 2020-02-11 22:55:38
转载: http://hi.baidu.com/dingo826/blog/item/f69884f44f5394def3d38578.html 块对象默认宽度是100%(继承自父元素),如果没有采用“float:left/right;”样式,相邻的两个块对象就会分排在不同的两行上。 内联对象的宽度取决于其内部元素的宽度与padding样式值之和,不可直接指定其宽度与高度(“display:block;”、“float:left/right;”强行转换后可以定义),相邻的两个内联对象会排在同一行上。 什么是内联对象,什么是块对象? 所有可视的文档对象都是块对象(block element)或者内联对象(inline element)。例如, div 是一个块对象,span 是一个内联对象。 块对象的特征是从新的一行开始且能包含其他块对象和内联对象。从新的一行开始:比如div就是前后断行; 内联对象被呈递时不会从新行开始,能够包含其他内联对象和数据。内联可以这样理解:不从新的一行开始,直接从内容里面,接着往后走。。。是指它能被别的对象内联。。。。 ========================== 相关信息参考:css display参数 block : CSS1 块对象的默认值。将对象强制作为块对象呈递,为对象之后添加新行 none : CSS1 隐藏对象。与

主页的设计

匆匆过客 提交于 2020-02-11 19:47:26
主页仍然用了淘宝的模子进行了设计,成果: 在推荐这一块的盒子数决定由服务器决定,会在本地存cookie,然后查询用户喜好从而推荐。 今天用的比较多的是position的absolute和relative,深切的感受了absolue。 absolute在有父元素定位时按父元素来,没有时按照文本来。 relative按照自己来。 遇到的难点 尽管文本框改为圆角,点击时还是有蓝色外框 一开始尝试用F12检查这个元素的,结果发现找不到这个元素,最后通过百度找到了正确的解决方式: 有一个outline的属性,是专门用来设置这个的,修改即可 搜索按定位不到文本框上 我用的是将文本全部设置成了圆角,按钮覆盖在文本框的上面,就在现在写博客的时候突然发现自己有点蠢~ 可以将文本框右边设置成直角的呀,都不需要定位了~没法吐槽自己当时的脑回路~当然按钮用了渐变的效果~ 列表的hover效果只有文字背景色改变 这个问题是今天新的领悟,更加熟悉了盒模型,如果给列表设置margin的话背景色当然就给内容上色了, 导致一段空隙,这个空隙就是margin的空隙,而padding设置则正好,将列表项的内容充实了,所以就全上了色。 外边框的像素影响了尺寸的设置总是差几个像素 由于有印象,所以比较快的解决了这个问题,就是设置box-sizing: border-box;即可,把边框也算在盒子内部。 主面板的布局

C++面向过程编程

試著忘記壹切 提交于 2020-02-11 18:47:55
前言 C语言是面向过程的编程语言,C++是面向对象的编程语言,这是两种不同的编程语言。C语言是C++的子集,C++是C语言的超集,C++进一步扩充和完善了C语言,其中大部分是对于面向对象编程的拓展。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。 从“Hello world!”讲起 传承学习编程语言的优良传统,我们来写一段“Hello world!”: #include <iostream> using namespace std; int main() { cout << "Hello World"; return 0; } 类 类(class)是用户自定义的数据类型,是一种构造类型,与C语言结构体类似,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数,通过类定义出来的变量也有特定的称呼,叫做“对象”。类一般分为两部分,分别写在不同的文件当中,其一是头文件,用来声明这种类所提供的功能,另一个文件包含了完成这些操作的代码。想要使用类,就必须现在程序中包含头文件。 标准“输入/输出库” 在 C++ 标准的“输入/输出库”名为“ iostream ”,iostream 这个单词是由3个部分组成的,即 i-o-stream ,意为输入输出流。在 iostream

LCT小结

夙愿已清 提交于 2020-02-11 04:23:43
前言 去年其实已经学过 \(LCT\) 了 ,但因为准备 \(noip\) 就没做什么题,忘得差不多啦,来补份总结 其实 \(LCT\) 是可以用 \(FHQ\_treap\) 实现的,但似乎更慢??某 \(dalao\) 测试过的 反正 \(LCT\) 码量小(稍微压点就 \(60\) 行以下了),而且网上大部分 \(LCT\) 都是用 \(splay\) 操作的,暂时不建议大家用 \(FHQ\_treap\) 注:本文过于简短,只适合做总结观看 性质 \(LCT\) ,全称 \(Link Cut Tree\) ,是一种维护动态树的利器 \(1.\) 每个原树节点存在且仅存在于一棵 \(splay\) \(2.\) 整个 \(LCT\) ,是由多棵 \(splay\) 构成的森林,其中每棵 \(splay\) 维护的是一条从上至下在原树中深度递增的路径,中序遍历后的点序列的在原树中的深度递增 \(3.LCT\) 里的点靠实边和虚边连接,实边在 \(splay\) 中 虚边是由一棵 \(splay\) 指向另一棵 \(splay\) 的某个节点:该 \(splay\) 中的根指向原树深度最小的点的父亲(根与深度最小的点不等价) 当原树某点有多个儿子时,其中一个儿子存在于同棵 \(splay\) 且拉实边,其他儿子存在于其他的 \(splay\) 向该点拉虚边 \(Update(x)