2025 牛客寒假 6 部分题解(E, D, H, I)
I 小鸡的排列构造的 checker 看题第一反应是主席树。 定义 lst[x]lst[x]lst[x] 表示值 xxx 出现的下标(因为是排列只会出现一次),则每次询问中要求的区间排名即为 lstlstlst 上 p[c]p[c]p[c] 左侧在 [l,r][l,r][l,r] 之间的数的个数,加上 lll 就是答案。使用扫描线——离线树状数组解决即可。(如果你没有学过二位数点,类比树状数组求逆序对即可)。 赛时代码: 12345678910111213141516171819202122232425262728293031323334353637383940int n, m;cin >> n >> m;vector<int> p(n + 1);for (int &num : p | views::drop(1)) { cin >> num;}struct Query { int l, r, c,...
git仓库嵌套导致github actions部署hexo博客失败
git submodule 按网上的教程配置 github actions, 在 hexo generate 的时候无法解析文章里的 tag plugins(标签插件) 而是会报错. 我一开始还以为是插件没装上, 后来才意识到, 我的主题是直接在 themes 文件夹里 git clone 过来的, actions 中 clone 我的仓库是不包含这个主题的, 所以才报错. git 仓库嵌套使用后, 被嵌套的 git 仓库不能被外层 git 仓库检测到. 百度~~(其实是bing但我说习惯了)~~后发现 git 还有 submodule 这种东西, 刚好可以达到我们的目的. 首先要用 git rm --cached 删除原来的内层仓库, 不要直接删除, 否则外层可能会感知不到, 然后输入命令: 1git submodule add -b [branch] [repository_url] [path] 例如: 1git submodule add -b master https://github.com/jerryc127/hexo-theme-butterfly.git...
.NET5以上WPF发布单个文件
嵌入native libraries 最近要把WPF项目发布成含运行时(部署模式选择"独立")的单个exe, 想当然的在发布选项里勾选了"生成单个文件", 却仍生成了若干dll, 而且删除便无法运行, 似乎是native dlls. 搜索资料发现还需要在发布配置文件(Properties\PublishProfiles\*.pubxml)中加入一行代码: 1<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> 加入后, 运行程序时会先提取出本地库到目录, 某种意义上不算真正的单文件 详情见此 -> 微软官方文档 勾选生成单个文件已经在开头提过了, 后文再补充一些我能想到的其他未能生成单个文件的原因 更改文件保存方式 请在属性选项卡中将图片等文件的"生成操作"(build action)设置为 资源, "复制到输出目录"设置为 不复制, 代码中以路径或Pack...
[游记] TJOI 2022
没能去成的最后一次OI比赛
C#基础教程[5] 方法
方法的定义 在本节之前为了便于理解故将方法称为函数, 本节之后为了与专有名词接轨所以使用方法一词 我们已经用过很多内置的方法了, 例如 WriteLine(), ToInt32(), Max() 等等, 其实我们也可以定义方法, 定义方法的语法如下: 1234[访问修饰符] 返回值类型 方法名([参数列表]){ //方法体} 让我们以下面这个方法为例, 分析一下定义方法的语法的含义 1234public int Square(int a){ return a * a;} 这个方法接收一个 int 类型的参数并记为 a, 然后返回 a 的平方 public 是访问修饰符, 除此之外还有 private, protected 等. 如无特殊说明, 本文中所有的访问修饰符更改都不会影响结果, 先不用在意 其中第一个 int 表示的是方法的返回值的类型, 括号里的第一个(也是唯一一个) int 表示接收的第一个参数是 int 类型的, 将这个参数记为 a, 可以在方法体里用 a...
C#基础教程[4] 数组
声明数组 数组是一个存储相同类型数据的固定大小的顺序集合。用简单的话来说就是,数组可以用单个变量名来访问很多同一类型的数据,而不需要声明很多的变量。 假设我们正在做一个把所有一共 n 个学生的分数进行排名的程序,那么我们就要储存所有学生的分数,由于 n 可能很大而且不是一个固定的值,所以我们无法为每个学生都声明一个变量来存储,就算那么做也无法进行排名。这时候我们需要使用数组。 声明数组的语法如下: 1type[] arrayName; // array 就是数组的英文 例如: 1int[] scores; 但如果这样使用数组的话会报错: error CS0165: 使用了未赋值的局部变量“score” 这是因为数组声明之后并不会初始化,所以还需要在声明的时候使用 new 关键字来创建数组的实例(关于什么是 new 操作符请见上一篇教程 不过暂时不懂问题也不大),例如: 1int[] scores = new int[5]; 其中方括号里的数组表示的是数组的大小,也就是数组中元素的个数。数组的长度是固定的,所以必须说明它的大小。 你可以声明任意类型的数组, 比如...
[题解] csp-s2021 T2 括号序列
本文于 2023.03.26 大修(近半重写) 因为 csp-s 考的太惨了,所以一直想着回头把前三题都AC了,结果一拖拖到现在才做完( 还有就是动态规划好难(wtcl) 题意 本题题意较复杂,建议直接去看原题(题目链接)。 总的来说,合法的括号序列一共分两类: 包含型:()()(),(A)(A)(A),(S)(S)(S),(AS)(AS)(AS),(SA)(SA)(SA) 并列型: ABABAB ,ASBASBASB 显然合法的括号序列两端必然分别是左右括号,而且合法的括号序列最小长度为2。 初步分析 数据范围可知这题大概需要一个 O(n3)O(n^3)O(n3) 的方法 这道题一看就像是区间DP。设状态 f[i][j]f[i][j]f[i][j] 表示 [i,j][i,j][i,j] 这段区间内的数量,由于上文已经证明看出“合法的括号序列两端必然分别是左右括号”,所以需要先确保 iii 对应位置可以为 (,即 a[i] == '(' || a[i] == '?',对 jjj 也同理,不满足的话 f[i][j]f[i][j]f[i][j] 一律为...
C#基础教程[3] 再谈类型
本文主要由zbx1425大佬所写 再谈数据类型 数据类型是一个初学者不太容易搞懂的概念,所以我们还要再强调一下。 首先,C#中的每一个“值”都是有类型的。包括由我们直接写出的称为“字面量”的东西(如 123, “Hello World”),变量的内容,以及函数返回的结果。(注:“返回 xxx” 意思就是函数运行的结果是xxx) 1 - int: 不带小数点的数字是 int 类型的 “字面量” 1.0 - double: 带上小数点之后,它就成了一个 double 类型的 “字面量” 请仔细注意这里的区别。例如 3 / 2 结果是 1,因为被除数和除数都是 int 所以执行了整数除法;但 3.0 / 2 由于被除数是 double 会执行浮点数除法,结果就是 1.5 了,这就是类型不同引发的差异,即使是对于直接给出的“字面量”也是同样。 被除数和除数中只要有一个是浮点数就会执行浮点数除法 "1.0" - string: 双引号括起来的是 string 类型的 “字面量”,注意它和不带双引号的值 1.0...
C#基础教程[2] 循环程序设计
之前学的程序里的语句都只能执行最多一次, 无法发挥出计算机的优势. 而为了让代码中的一行语句可以被执行若干遍, 于是便有了循环. 循环语句 while 循环 假设我们要写一个程序永远不停的输出 hello world (直到你关掉这个程序), 代码如下: 123while (true) { Console.WriteLine("hello world"); } 其中小括号里的为条件, 大括号里的(即这个代码块)为参与循环的部分 在进入循环之前会先判断括号里的条件,如果为 true 才执行,每次执行完大括号里的内容会再次判断括号里的条件,如果为 true 则再次执行大括号里的内容,循环往复直到括号里的条件为 false 因为上面的例子中括号里恒为 true 所以这个循环会永远进行下去 不能写成 while(1), 当你了解了 C# 中的数据类型转换机制的时候你会对此有更深的感悟 再举一个不是死循环的例子: 12345int a = 5;while (a < 10) { ...

![[游记] ICPC 2023 杭州游记](/img/default_cover/windows-TM.png)


![[题解] csp-s2021 T2 括号序列](/img/default_cover/marisa1.jpg)
![C#基础教程[3] 再谈类型](/img/default_cover/marisa2.jpg)