IncDec 序列
题目描述 给定一个长度为$n$的数列$a_1, a_2, \dots, a_n$。 每次可以选择一个区间$[l, r]$,使这个区间内的数都加 1 或者都减 1。请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。输入格式 第一行一个正整数$n$。 接下来$n$行,每行一个整数,第$i+1$行的整数表示$a_i$。输出格式 第一行输出最少操作次数。 第二行输出最终能得到多少种结果。输入输出样例 **输入 4 1 1 2 2 **输出 ``` 1 2 引言中有介绍如何得到最少的操作次数,对于最终得到的结果数:我们设正数和为p,负数和为q。在操作min(p,q)后只剩负数或者正数,这里假设只剩正数。我们还剩|p-q|次操作次数,在这每次操作中,区间一端必定在正数,另一端我们可以自由选择在哪里,如果在数组首部,我们就改变了最终得到的数组。|p-q|次操作我们可以操作在数组首部的次数有0,1,2……|p-q|。总共有|p-q|+1种情况。 #include<iostream>#include<vect...
Decrease
题目描述 给定一个 $n \times n$ 的矩阵,你可以进行若干次操作。每次操作,你可以将一个 $k \times k$ 的连续子矩阵里的所有数全部加上 1 或者全部减去 1。起始时,矩阵中有 $m$ 个位置上的数不为 0,其它位置上的数均为 0。请你求出至少需要多少次操作,可以使矩阵中所有数都变为 0。输入格式 第一行三个整数 $n, m, k$,分别表示矩阵大小、非 0 项数和每次修改的连续子矩阵大小。 接下来 $m$ 行,每行三个整数 $x, y, z$,表示初始时矩阵的第 $x$ 行第 $y$ 列上的数为 $z$。输出格式 一行一个整数,表示最少操作次数。 特别地,如果无法使矩阵中所有数都变为 0,输出 -1。输入输出样例 样例输入 #1 Plaintext 4 14 21 1 11 2 11 3 12 1 12 2 32 3 32 4 23 1 13 2 33 3 33 4 24 2 24 3 24 4 2 样例输出 #1 Plaintext -1 样例输入 #2 Plaintext 2 1 21 1 1 样例输出 #2 Plaintext -1 ...
Growing Vegetables is Fun
题目描述】给定一个长度为 $N$ 的序列 $A_i$。你可以进行若干次操作: 选定一个区间 $[L, R]$,让这个区间里的数加 $1$。设经过若干次操作后的序列为 $B_i$,你需要让 $B_i$ 满足下述要求: 存在一个整数 $k \in [1, N]$,满足对于子序列 $A_1 = {B_1, B_2, \dots, B_k}$ 为严格递增序列,对于子序列 $A_2 = {B_k, B_{k+1}, \dots, B_N}$ 为严格递减序列。你想知道最少需要多少次操作才能满足上述要求。【输入格式】 第一行一个整数 $N$ 代表序列长度。 第二行 $N$ 个整数 $A_i$ 代表序列。【输出格式】 一行一个整数代表最小操作次数。【输入输出样例】 输入:5 / 3 2 2 3 1 $\rightarrow$ 输出:3 输入:5 / 9 7 5 3 1 $\rightarrow$ 输出:0 输入:2 / 2021 2021 $\rightarrow$ 输出:1 输入:8 / 12 2 34 85 4 91 29 85 $\rightarrow$ 输出:53 1. 核心思路...
用邮票贴满网格图
题目描述问题摘要有 $N$ 个柱子排成一排,一开始每个柱子的损伤度均为 0。接下来会进行 $M$ 次攻击,每次攻击可以用 4 个参数 $l, r, s, e$ 来描述: 作用范围: 第 $l$ 个到第 $r$ 个之间所有的柱子(包含 $l, r$)。 伤害数值: 对第 $l$ 个柱子的伤害为 $s$,对第 $r$ 个柱子的伤害为 $e$。 伤害分布: 攻击产生的伤害值是一个等差数列。示例: 若 $l=1, r=5, s=2, e=10$,则对第 1~5 个柱子分别产生 2, 4, 6, 8, 10 的伤害。目标: 求出所有攻击完成后,每个柱子的最终损伤度。 输入格式 第一行包含 2 个整数 $N, M$,用空格隔开。 接下来 $M$ 行,每行 4 个整数 $l, r, s, e$,含义见题目描述。 数据保证对每个柱子产生的每次伤害值都是整数。 输出格式由于输出数据可能过大无法全部输出,为了确保你真的能维护所有柱子的损伤度,只需要输出两个值: 所有柱子损伤度的异或和(XOR sum)。 所有柱子损伤度的最大值。 _(注:异或即所有数字按位异或起来的值,C++ 中运算符为...
用邮票贴满网格图
给你一个 m x n 的二进制矩阵 grid 。 grid[i][j] = 0 表示该格子是空的 grid[i][j] = 1 表示该格子被占用再给你一个邮票尺寸:stampHeight x stampWidth你可以放置任意数量的邮票,满足: 放置规则 邮票只能放在 全部是 0 的区域(不能覆盖 1) 邮票不能旋转 邮票必须完全在矩阵内部 邮票之间可以重叠 最终必须覆盖 所有 0 格子 目标如果可以通过放置若干邮票,使所有 0 都被覆盖,则返回 true,否则返回 false。 🔍 举个例子输入:grid = [ [1,0,0], [1,0,0], [1,0,0] ] stampHeight = 2 stampWidth = 2输出:true因为可以贴两张 2x2 的邮票覆盖所有 0 我们可以先对整个网格图进行二维前缀和,另外开辟一个数组和网格图等大初始化为0去记录每个格子是否被覆盖。我们统计每个stampHeight x stampWidth区域的和是否为0,如果为0,则将新开辟数组对应区域加1。最后我们统计网格图值为0的格子覆盖次数是否大于等于1。...
Linux文件的上传、下载
通过FinalShell在Linux系统中进行上传、下载我们可以通过FinalShell工具,方便的和虚拟机进行数据交换。在FinalShell软件的下方窗体中,提供了Linux的文件系统视图,可以方便的:浏览文件系统,找到合适的文件,右键点击下载,即可传输到本地电脑浏览文件系统,找到合适的目录,将本地电脑的文件拓展进入,即可方便的上传数据到Linux中 rz、sz命令当然,除了通过FinalShell的下方窗体进行文件的传输以外,也可以通过rz、sz命令进行文件传输。rz、sz命令需要安装,可以通过:yum -y install lrzsz,即可安装。rz命令,进行上传,语法:直接输入rz即可sz命令进行下载,语法:sz 要下载的文件文件会自动下载到桌面的:fsdownload文件夹中。注意,rz、sz命令需要终端软件支持才可正常运行FinalShell、SecureCRT、XShell等常用终端软件均支持此操作
各类小技巧(快捷键)
ctrl + c 强制停止Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl + c命令输入错误,也可以通过快捷键ctrl + c,退出当前输入,重新输入 ctrl + d 退出或登出可以通过快捷键:ctrl + d,退出账户的登录或者退出某些特定程序的专属页面 ps:不能用于退出vi/vim 历史命令搜索可以通过history命令,查看历史输入过的命令 可以通过:!命令前缀,自动执行上一次匹配前缀的命令它会从下往上匹配历史命令中第一个以p开头的命令并执行 可以通过快捷键:ctrl + r,输入内容去匹配历史命令如果搜索到的内容是你需要的,那么:回车键可以直接执行键盘左右键,可以得到此命令(不执行) 光标移动快捷键ctrl + a,跳到命令开头ctrl + e,跳到命令结尾ctrl + 键盘左键,向左跳一个单词ctrl + 键盘右键,向右跳一个单词 清屏通过快捷键ctrl + l,可以清空终端内容或通过命令clear得到同样效果
systemctl
systemctl命令Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启能够被systemctl管理的软件,一般也称之为:服务语法:systemctl start|stop|status|enable|disable 服务名系统内置的服务比较多,比如:NetworkManager,主网络服务network,副网络服务firewalld,防火墙服务sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务) 除了内置的服务以外,部分第三方软件安装后也可以以systemctl进行控制。yum install -y ntp,安装ntp软件可以通过ntpd服务名,配合systemctl进行控制yum install -y httpd,安装apache服务器软件可以通过httpd服务名,配合systemctl进行控制部分软件安装后没有自动集成到systemctl中,我们可以手动添加。
压缩和解压
压缩格式zip格式:Linux、Windows、MacOS,常用7zip:Windows系统常用rar:Windows系统常用tar:Linux、MacOS常用gzip:Linux、MacOS常用 tar命令Linux和Mac系统常用有2种压缩格式,后缀名分别是:.tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装.gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作 tar 命令压缩tar的常用组合为:tar -cvf test.tar 1.txt 2.txt 3.txt将1.txt 2.txt 3.txt 压缩到test.tar文件内tar -zcvf test.tar.gz 1.txt 2.txt 3.txt将1.txt 2.txt 3.txt 压缩到test.tar.gz文件内,使用gzip模式注意:-z选项如果使用的话,一般处于选项位第一个-f选项,必须在选项位最后一个...
环境变量
环境变量在讲解which命令的时候,我们知道使用的一系列命令其实本质上就是一个个的可执行程序。比如,cd命令的本体就是:/usr/bin/cd 这个程序文件。我们是否会有疑问,为何无论当前工作目录在哪里,都能执行:/usr/bin/cd这个程序呢?这就是环境变量的作用啦。 环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。在Linux系统中执行:env命令即可查看当前系统中记录的环境变量环境变量是一种KeyValue型结构,即名称和值,如下图: 环境变量:PATH在前面提出的问题中,我们说无论当前工作目录是什么,都能执行/usr/bin/cd这个程序,这个就是借助环境变量中:PATH这个项目的值来做到的。PATH记录了系统执行任何命令的搜索路径当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体比如执行cd命令,就从第二个目录/usr/bin中搜索到了cd命令,并执行 $符号在Linux系统中,$符号被用于取”变量”的值。环境变量记录的信息,除了给操作系统自己使用外,如果我们想要取用,也可以使用。取得环境变量...
