/img/dodola.png

一只小菜鸡的Blog

为twikoo添加图片功能

一篇私有配置图床,给twikoo评论插件添加图片功能的文章。

背景:最近回想起来本站的twikoo评论尚未配置过图床,所以此前评论区不能上传图片,这篇就记录一下twikoo官方推荐的lsky-pro私有部署图床。

选用的图床是兰空图床👉lsky-org/lsky-pro: ☁️兰空图床(Lsky Pro) - Your photo album on the cloud. (github.com)

文档:Lsky Pro

服务器环境:

Vue3封装一个SVG组件

Vue3+Vite+Svg

以前使用Svg的时候会图简单直接将内容巨长的Svg代码粘贴在项目中,结果导致需要用Svg图标的部分代码巨长,今天写项目又需要使用Svg了,于是想着对其进行封装。

使用vite-plugin-svg-icons插件。

安装:

1
npm i vite-plugin-svg-icons -D

src/assets/下新建icon文件夹,这个文件夹下存放我们以后要用的.svg文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import {createSvgIconsPlugin} from 'vite-plugin-svg-icons';

export default defineConfig({
    //...
    plugins:[
        //...
        createSvgIconsPlugin({
            iconDirs:[
                  // 自己的svg存放目录
                path.resolve(process.cwd(),'src/assets/icon'),
            ],
            symbolId:'icon-[name]',  // 设置symbol的id
        })
    ]
})
1
import 'virtual:svg-icons-register';

src/components/新建SvgIcon文件夹,在其中新建index.vue,内容:

线段树讲义||寒假

  • 线段树是一棵二叉树,每个节点维护一个区间内$[l,r]$的信息
  • 左子树区间维护$[l,\lfloor \frac{l+r}{2} \rfloor]$的信息,右子树维护$[\lfloor \frac{l+r}{2} \rfloor+1,r]$的信息
  • 节点信息可以由两个子节点合并得到
  • 任意一个区间会被分为线段树上$O(\log n)$个节点

线段树可以在$O(\log N)$的时间复杂度内实现单点修改区间修改、**区间查询(区间求和/区间最大值/区间最小值)**等操作。

Codeforces Round 931(div2)

A-Too Min Too Max

对一个数组,找到索引$(i,j,k,l)$使得$|a_i-a_j|+|a_j-a_k|+|a_k-a_l|+|a_l-a_i|$最大的值。

$t(1≤t≤500)$

$n(4≤n≤100)$​

$a_i(-10^6\le a_i\le 10^6)$

选则最大的两个数和最小的两个数,结果为最大-最小+次大-最小+最大-次小+次大-次小。

1
2
3
4
5
6
7
8
void solve() {
    int n;cin >> n;
    vector<ll>a(n);
    for (int i = 0;i < n;i++)
        cin >> a[i];
    sort(a.begin(), a.end());
    cout << a[n - 1] - a[0] + a[n - 2] - a[0] + a[n - 1] - a[1] + a[n - 2] - a[1] << '\n';
}

B-Yet Another Coin Problem

有一些5种不同面值的金币,面值有:$1,3,6,10,15$。找到使用金币数目最少的组合方式达到数值为$n$的组合。

$t(1≤t≤10^4)$

$n(1≤n≤10^9)$​

打表。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
void solve() {
    ll n;cin >> n;
    vector<ll>p = { 0,
    1,2,1,2,3,1,2,3,2,1,
    2,2,2,3,1,2,3,2,3,2,
    2,3,3,3,2,3,3,3,4,2
    };
    ll ans = n / 15 + p[n % 15];
    if (n / 15 > 0)
        ans = min(ans, n / 15 - 1 + p[n % 15 + 15]);
    cout << ans << endl;

}

C-Find a Mine

交互题。

Codeforces Round 932(div2)

A-Entertainment in MAC

可以对一个字符串进行两种操作:

  1. 将字符串反转
  2. 将该字符串反转后接在原串的后面。

可以进行任意次上述操作,获得字典序最小的字符串。

$t(1≤t≤500)$

$n(2≤n≤10^9)$​

$s(1\le |s|\le 100)$

对比反转前后的字符串字典序大小,再决定是操作1还是操作2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void solve() {
    ll n;cin >> n;
    string s;cin >> s;
    string t = s;
    reverse(t.begin(), t.end());
    if (s > t) {
        cout << t << s << endl;
    }
    else {
        cout << s << endl;
    }
}

B-Informatics in MAC

$MEX$:不属于该数组的最小非负整数。