sum

Java Varargs 可变参数使用

守給你的承諾、 提交于 2020-01-28 04:39:47
Java1.5 提供了一个叫varargs的新功能,就是可变长度的参数。 "Varargs"是 “variable number of arguments”的意思。有时候也被简单的称为 “variable arguments”。 定义实参个数可变的方法:只要在一个形参的"类型"与"参数名"之间加上三个连续的"."(即"...",英文里的句中省略号),就可以让它和不确定个实参相匹配。 以下实例创建了 sumvarargs() 方法来统计所有数字的值。 我们在这里的 Main 方法中添加了 new int[]{10, 12, 33, 7} 4 个参数,实际上你可以在这里持续添加不同的参数,在计算 sum 的方法中都可以根据你添加的参数来进行处理。 GIT 请参考 GitHub 上的源码代码: https://github.com/cwiki-us/java-tutorial/blob/master/src/main/java/com/ossez/lang/tutorial/usecases/VarargsCase.java SRC package com.ossez.lang.tutorial.usecases; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * variable arguments use

POJ 3667 Hotel(线段树+区间合并)

筅森魡賤 提交于 2020-01-28 04:29:26
http://poj.org/problem?id=3667 题意: 有N个房间,M次操作。有两种操作(1)"1a",表示找到连续的长度为a的空房间,如果有多解,优先左边的,即表示入住。(2)"2 b len",把起点为b长度的len的房间清空,即退房。 思路: 区间合并的线段树题。 其实如果单点更新和区间更新做得多了的话,区间合并也就不难了。 对于这道题,我们用线段树维护三个值,从左端开始的连续空房间数,从右边开始的连续空房间数,以及整个区间内最大的连续空房间数。 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdio> 5 #include<vector> 6 #include<stack> 7 #include<queue> 8 #include<cmath> 9 #include<map> 10 #include<set> 11 using namespace std; 12 typedef long long ll; 13 const int INF = 0x3f3f3f3f; 14 const int maxn=50000+5; 15 16 int n, m; 17 18 struct node //维护从左端开始的最大连续空房间,从右端开始的最大连续空房间

最大连续子序列和

邮差的信 提交于 2020-01-27 05:45:44
下面引入一个编程题理解最大连续子序列和的概念 有一个数组,如1, -5, 8, 3, -4, 15, -8,查找其中连续和最大的相邻串的值。在本例中,最大值为8 + 3 + -4 + 15 = 22. 朴素算法的复杂度为O(n^2),另一种算法如下: 首先假设我们已经找到了最大连续和子串在数组中的起始位置(i)和结束位置(j),其中i <= j,即最大和maxSum = a[i] + a[i + 1] + … + a[j],我们来看看这个子串有什么性质: 1.a[i] > 0,否则我们完全可以去掉a[i]这个元素 而得到一个更大的和; 2.i > 0且a[i - 1] < 0 或 i == 0,下面假设i > 0,这一条性质也是因为如果a[i - 1] > 0的话我们求和时可以加上a[i - 1]这个元素得到一个更大的和; 元素a[i - 1]与它之前的任一元素之间的子串之和sum < 0 ,即对于任何一个m(0 <= m < i - 1),则有a[m] + a[m + 1] + … + a[i - 1] < 0,这条性质同样可以用反证法证明。 如果一时想不明白上面的第三条性质,可以用笔在纸上画画图帮助我们分析。根据第二三条性质,我们感觉 a[i - 1]是一个分界点,最大和的子串要么就在a[i - 1]元素之后,要么就在a[i - 1]之前,最大和的子串不可能跨过a[i - 1

R 语言之基础用法

大兔子大兔子 提交于 2020-01-27 04:40:24
本节主要介绍R的一些常用的基础用法。 参考书籍: "Bioinformatics with R Cookbook" 安装 安装 CRAN 上的包: > install.packages("package_name") 安装 Bioconductor 上的包: > source("http://bioconductor.org/biocLite.R") > biocLite("limma") 选择镜像网站(因为默认的镜像网速可能慢): 对于安装 CRAN 上的包: > chooseCRANmirror() 对于安装 Bioconductor 上的包: > chooseBioCmirror() 常用操作 查看当前用户已安装了什么包: > library() 查看已安装 R 的版本信息,操作系统,以及已经载入的包的信息: > sessionInfo() # 这个用法还是很方便好用的。 查看以及改变当前 R 的 path: > getwd() # 查看当前的工作目录 [1] "/home/user" > setwd("/home/user/Downloads") # 改变当前的工作目录 [1] "/home/user/Downloads" 退出: > q() 帮助 在R下一般安装的包很多,每个包的功能也很多,在命令行下熟练掌握 help 的用法是很重要的. 查看R官网上的基础文档,入门文档

面向对象程序设计寒假作业1

不打扰是莪最后的温柔 提交于 2020-01-26 19:10:51
这个作业属于哪个课程 2020年面向对象程序设计 这个作业要求在哪里 面向对象程序设计寒假作业1 这个作业的目标 1.安装C++开发环境(见附录)2.完成问答题、实践题及编程题3.发布博客 作业正文 如下 其他参考文献 C语言的不足之处 C语言的编译过程 一.问答题:(基础3分) 回答以下问题: 1.1如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。 1.2如果你已经了解C++请回答以下问题:你觉得C++和C语言比有什么优点。 2.查阅相关资料,简述一下C语言/C++的编译过程。 1.1:C语言语法限制不太严格,程序设计自由度大。例如, C语言对数组下标越界不检查,容易造成数据在内存中的混乱。 C语言中许多运算符具有不同的意义,甚至有些关键字也具有好几种意义。例如, void作为函数的返回类型,表示不返回任何值;在指针声明中,表示通用指针类型;在参数列表中,表示没有参数。 c语言不太严谨,例如,整型和浮点型变量运算时不会报错。 2:编译分为四个过程,分别是预处理,编译,汇编,链接。 预处理用于将所有#include头文件以及宏定义替换成其真正内容,预处理后会得到比原来体积大得多的文本文件。 编译将经过预处理之后的程序转换成特定汇编代码的过程,生成的也是文本文件。 汇编将上一步的汇编代码转换成机器码,为每一个源文件产生一个目标文件,是二进制格式。

树链剖分

本秂侑毒 提交于 2020-01-26 16:41:14
题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有节点的值之和 操作3: 格式: 3 x z 表示将以x为根节点的子树内所有节点值都加上z 操作4: 格式: 4 x 表示求以x为根节点的子树内所有节点值之和 输入 第一行包含4个正整数N、M、R、P,分别表示树的结点个数、操作个数、根节点序号和取模数(即所有的输出结果均对此取模)。 接下来一行包含N个非负整数,分别依次表示各个节点上初始的数值。 接下来N-1行每行包含两个整数x、y,表示点x和点y之间连有一条边(保证无环且连通) 接下来M行每行包含若干个正整数,每行表示一个操作,格式如下: 操作1: 1 x y z 操作2: 2 x y 操作3: 3 x z 操作4: 4 x 输出 输出包含若干行,分别依次表示每个操作2或操作4所得的结果(对P取模) 样例输入 5 5 2 24 7 3 7 8 0 1 2 1 5 3 1 4 1 3 4 2 3 2 2 4 5 1 5 1 3 2 1 3 样例输出 2 21 提示 对于100%的数据:N<=100000,M<=100000 输入的每一个数均小于2147483647 重儿子:siz[u

线段树入门教程

狂风中的少年 提交于 2020-01-26 15:42:40
线段树入门教程 线段树往往会是各位OIer接触的第一种玄学数据结构,awa这东西很不好理解,但确实很有用。我还是争取写一篇对刚入门的新手友好的文章对线段树加一说明,手把手教大家写线段树。 线段树是什么? 二叉树大家知道吗?就是每一个节点会有左右两个子节点,子节点又有子节点……总起来就是二叉树。二叉树在玄学数据结构中会经常用到,比如splay,treap,乃至红黑树等等魔法玩意。这些不用管,就了解一下二叉树就好了。 很好理解对吗? 线段树就是基于二叉树的一种数据结构,用于解决在一段区间上修改和查询的问题。 画一张易于理解的图 好吧我承认图画的吃藕。。蓝色是小标号,忽略就好了。 线段树的本质,就是将一段区间(图中的1~8)经过多次二分,拆成一个一个的单点(图中的1 2 3 4 5 6 7 8) 嗯没错这个就是线段树 为什么选择线段树? 因为快。。。 举个例子,比如我们要将2~5号点加上1,朴素做法是一个一个相加,时间复杂度为O(n),而我们如果使用线段树,会是这样操作的: 我们从线段树的顶端开始; 如果当前枚举到的区间被要加v的区间完全包含,就在这个区间进行加法操作,把这个区间加上要加的数v乘上这段区间的元素(点)个数,再记录一下这段区间被加过v,就不再往下枚举了。 如果不被完全包含,就接着二分,枚举当前这一段的前半段和后半段 这个就是线段树的原理辣,努力理解一下。 还是拿1

Scala 入门-隐式参数(implicit)

故事扮演 提交于 2020-01-26 09:42:53
专栏原创出处: github-源笔记文件 , github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。 Scala 编程语言专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Scala 编程语言 在参数列表的开头添加了 implicit 关键字,该参数列表里的参数即为隐式参数。 一个方法只能有一个隐式参数列表,隐式参数列表中可以定义多个隐式参数。 在调用方法时,如果没有为隐式参数列表传入值,Scala 会为其自动匹配相应类型的隐式值。 隐式参数列表只能是最后一个参数列表。 Scala 在调用包含有隐式参数块的方法时,将首先查找可以直接访问的隐式定义和隐式参数。 其次是在所有伴生对象中查找与隐式候选类型相关的有隐式标记的成员。 abstract class Monoid[A] { def add(x: A, y: A): A def unit: A } object ImplicitTest { // 隐式参数 implicit val stringMonoid: Monoid[String] = new Monoid[String] { def add(x: String, y: String): String = x concat y def unit: String = "" } // 隐式参数 implicit val intMonoid: Monoid

区间DP:石子归并

百般思念 提交于 2020-01-26 00:48:21
题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn (wi <= 100) 输出描述 Output Description 一个整数表示最小合并代价 样例输入 Sample Input 4 4 1 1 4 样例输出 Sample Output 18这道题可以轻松地找出状态转移方程f[i,j]:=max{f[i,k]+f[k+1,j]}+sum[i,j];但问题是如何递推是个问题,1:若正推,for i:=1 to n do for j:=i to n do 这样的话,递推顺序为(1,1),(1,2),(1,3),(1,4),(2,2)..... 中间还有未求的量。2:若逆推,顺序为(n,n),(n-1,n-1),(n-1,n),(n-2,n-2)....。故应逆推。还有一点要注意,就是当前所求的区间的前趋i,后趋j,和中间变量k有(i=j-1=k)时f[i,j]:=stone[i]+stone[j]; var num:longint; stone:array[1..100]of integer; i