构造 - Codeforces Round 889 (Div. 2) - Dual (Easy & Hard Version)
Dual (Easy & Hard Version)
前往 算竞题解 分类 || 前往 算竞模板 分类
原题链接
C2-Dual (Hard Version) Codeforces Round 889 (Div. 2)
最喜欢这种什么算法都没有的构造题。
简明题意
给定 nnn 个数 aia_iai,你可以进行不超过 kkk 次操作,使得最终 aaa 是非降序的。每次操作任选两个数使得 ai+=aja_i += a_jai+=aj。
Easy Version:1≤n≤201 \le n \le 201≤n≤20,−20≤ai≤20-20 \le a_i \le 20−20≤ai≤20,k=50k = 50k=50。
Hard Version:1≤n≤201 \le n \le 201≤n≤20,−20≤ai≤20-20 \le a_i \le 20−20≤ai≤20,k=31k = 31k=31。
解题思路
Easy Version 的解法很多就不介绍了,我直接出的 Hard Version 的思路。
首先我们考虑使用 前缀和 操作,因为不使用前缀和会发现问题变 ...
Markdown 学习笔记(三) - Mermaid 绘图
回到文章目录
Mermaid是一个开源项目,目前已经包含了众多种类的绘图。Markdown 将其引入到代码块中,你可以使用它在代码块中进行简单的绘图。Mermaid 目前仅被少数编辑器支持,你可能需要在编辑器设置中手动打开相关设置,其中包括 Typora。
本文只介绍其中的 flowchart、gantt、pie 。如果还有其他需要请访问 Mermaid 官网 获取更加详细的指南。
不同版本Mermaid略有差异,这里以V8.8为例。
花絮 - 不要高估 Mermaid有一段时间,我实际上非常痴迷于 Mermaid 的强大,并不断地向周围的人分享它。实际上,Mermaid 确实有其便捷之处,但是绝不能说其强大,当你需要画一幅略大的图时,Mermaid 就无能为力。
比如有一次我试图帮 ACMer 队友画一幅简单的二分图,用来理解匈牙利算法。但 Mermaid 始终无法将二分图的两个点集对齐,二分图长得非常难看。
比如上学期的 C++ 课设上,课设报告需要提交流程图和类图,我试图用 Mermaid 完成类图但画出的图太过凌乱,试图画出流程图但是代码太长把自己都看晕了。
Mermaid ...
Markdown 学习笔记(二) - LATEX 公式
回到文章目录
LATEX 源于另一种文本语言,Markdown 引入了对于 LATEX 数学公式的支持,现在编辑器基本都不同程度支持 LATEX 公式,可能需要在编辑器中手动打开相关设置。需要特别注意的是,LATEX 是一门繁杂的语言,因此 Markdown 仅支持了常用的 LATEX 符号,但不同编辑器所支持的 LATEX 符号集也略有差异。
本文中一些 LATEX 语法不被当前平台支持,可以自行粘贴到 Typora 查看。
行公式 & 块公式
行公式
代码预览1$ax^2+bx+c=0$ax2+bx+c=0ax^2+bx+c=0ax2+bx+c=0
块公式
代码预览123$$ax^2+bx+c=0$$ax2+bx+c=0ax^2+bx+c=0
ax2+bx+c=0
常用符号
特殊符号
123456\ // 转义符~ // 空格符\\ // 换行符{} // 结合符& // 制表符% // 批注符
标注
文本
在Markdown 文本中,空格等符号可以被正常使用。
代码预览1234$$Markdown~常规 ...
Markdown 学习笔记(一) - 原生语法
回到文章目录
本文转载自 NX の 博客
Markdown 原生语法是 Markdown 最基础的支持。它以精简方便著称,上手快。不同编辑器的 Markdown 语法偶尔略有差异,不过渲染效果差异极大,可以选择自己喜欢的风格。
标题
使用#来设置标题,有多少个#就是第多少级标题
代码预览123456# 这是一级标题## 这是二级标题### 这是三级标题#### 这是四级标题##### 这是五级标题###### 这是六级标题见本文中的标题。
字体效果
原版中共有3种字体效果:加粗、倾斜、删除,可以相互叠加
代码预览12345**这是加粗的文字***这是倾斜的文字****这是斜体加粗的文字***~~这是加删除线的文字~~~~*这是斜体删除的文字*~~这是加粗的文字
这是倾斜的文字
这是斜体加粗的文字
这是加删除线的文字
这是斜体删除的文字
引用
使用>添加引用效果,允许嵌套
代码预览1> 这是引用的内容
12> 这是引用的内容> > 而且还可以嵌套引用
这是引用的内容
这是引用的内容
而且还可以嵌套引用
注:不同编辑器的引用差异较大。
列表
列 ...
Markdown 学习笔记(零) - 前言
前言
Markdown 是一种轻量级标记语言,它以纯文本形式(易读、易写、易更改)编写文档,并最终以 HTML 格式发布。Markdown 也可以理解为将以 Markdown 语法编写的语言转换成 HTML 内容的工具。
选择 Markdown 是因为 Markdown 可以认为是简化版的 HTML,使用 HTML 可以编写优美的文档,但 HTML 大量的标签并不是对于书写友好。Markdown 在最简化用户书写的情况下为用户提供了较为多样的文本格式。当然,如果需要,大多数 Markdown 编辑器都支持直接使用 HTML 语法。
Markdown 编辑器种类繁多,并没有十分统一的标准,不同编辑器的渲染效果也差异极大。同时不同编辑器支持各不相同的拓展,后面的文章将会介绍 Markdown 原生语法、LATEX 数学公式、Mermaid 绘图、Hexo 标签外挂,后三者均为拓展,支持的普及度和差异性也各不相同。
在开始之前请下载好你的 Markdown 编辑器,推荐使用:Typora — a markdown editor, markdown reader.
前置知识
本系列不需要任何前 ...
Golang 入门基础(八) - 包管理
回到文章目录
Golang 提供了包管理方式,方便项目的分类管理。
你可以理解为这是进阶版的 Get Start。
项目结构
flowchart TD
P("项目路径 - 项目名")
D1("包路径 - 包名")
D2("包路径 - 包名")
_1("...")
D0("包路径 src - 包名 main")
F11("源文件")
F12("源文件")
_2("...")
F21("源文件")
F22("源文件")
F23("源文件")
_3("...")
_4("...")
F01("源文件 main.go")
P --> D1 & D2 & _1 & D0
...
Golang 入门基础(七) - 类面向对象设计
回到文章目录
Golang 并不支持面向对象设计,但是它一些特性使许多面向对象的设计方法得以引入。
数据存储 - 结构体
对象是变量与函数的集合,在 Golang 中,变量对应结构体的字段、函数对应结构体的方法。在 Golang 中结构体存储了对象的所有变量。
详见 Golang 入门基础(三) - 内置数据类型(上) - 结构体类型
静态绑定 - 方法
对象是变量与函数的集合,在 Golang 中,变量对应结构体的字段、函数对应结构体的方法。在 Golang 中方法实现了对象到函数的静态绑定。
详见 Golang 入门基础(四) - 内置数据类型(下) - 方法
继承
Golang 中结构体支持继承,其继承同时继承其字段与方法。
详见 Golang 入门基础(三) - 内置数据类型(上) - 结构体类型 - 结构体类型的嵌套与继承
1234567891011121314151617181920package mainimport "fmt"type A struct { name string}func (a ...
Golang 入门基础(六) - 多线程开发
回到文章目录
Golang 原生支持多线程开发,因此多线程开发是学习 Golang 不可少的环节。
多线程相关语法
详见 Golang 入门基础(四) - 内置数据类型(下) - channel 类型
详见 Golang 入门基础(五) - 控制语句 - 条件控制语句 - select-case 语句
详见 Golang 入门基础(五) - 控制语句 - 特殊控制语句 - go 语句
多线程 Golang 解决方案
等待子线程结束
众所周知,主线程结束将结束所有子线程。其他语言提供了 wait 或 join 等方法等待子线程正常结束,在 Golang 中可以使用 channel 等待线程结束。
未等待结果
在下面这个案例中,你将会看到未等待子线程结束时,子线程未执行任何代码。因为在此情况下,主线程结束将立即杀死子线程。
1234567891011func thread() { for i := 0; i < 5; i++ { fmt.Println("Thread", i) time.Sleep(ti ...
Golang 入门基础(五) - 控制语句
回到文章目录
Golang 中的条件控制语句与 Clang 相似,但省去了许多不必要的附加符号,提供必要的精简方式。
条件控制语句
if-else 语句
与 Clang 不同的是 Golang 中的表达式都省去了 () 。
Usage 1:
1234567if <condition1> { <block1>} else if <condition2> { <block2>} else { <block0>}
Example:
123if returnValue == -1 { fmt.Println("Something Error.")}
12345if weight < 240 { fmt.Println("Weight OK!")} else { fmt.Println("Too weight.") ...
Golang 入门基础(四) - 内置数据类型(下)
回到文章目录
channel 类型
channel 用于进行多线程管道通信与同步。
定义 channel
1a := make(chan <type>, [<size>])
12a := make(chan int) // 无缓冲区的 int 通道b := make(chan int, 2) // 缓冲区大小为 2 的 int 通道
注意:channel也是引用数据类型,直接使用 var a chan int 是错误的,其没有构造 chan 结构。
channel 读写
channel 具有缓冲区大小,读写会对 channel 的缓冲区进行操作。当缓冲区为空时,读操作阻塞,知道新的写操作完成;当缓冲区为满时,写操作阻塞。
特殊地,当缓冲区大小为 0 时,所有读写操作都会阻塞等待直到 channel 的读写操作配对。
channel 写
1<channel> <- <data>
1a <- 1
channel 读
1<data> := <-<channel>
1x ...