二分答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/// @brief 二分答案(闭区间)
/// @tparam T 数字类型
/// @param l 左初始值
/// @param r 右初始值
/// @param check 检查答案在左还是右的函数,若true则向右移动,否则向左移动
/// @param reverseAns 是否反转答案
/// @return 答案
template <typename T = int>
T ba(T l, T r, bool (*check)(T), bool reverseAns = false)
{
T m = 0, ans = 0;
while (r >= l)
{
m = (l + r) >> 1;

// cout<<"l: "<<l<<" r: "<<r<<" m: "<<m<<endl;

if (check(m))
{
ans = reverseAns ? ans : m;
l = m + 1;
}
else
{
ans = reverseAns ? m : ans;
r = m - 1;
}
}

return ans;
}

/// @brief 二分答案(左开右闭,向左寻找)
/// @tparam T 数字类型
/// @param l 左初始值
/// @param r 右初始值
/// @param check 检查答案在左还是右的函数,若true则向右移动,否则向左移动
/// @return 答案
template <typename T = int>
T baL(T l, T r, bool (*check)(T))
{
while (l < r)
{
T m = (l + r) >> 1;

// cout<<"l: "<<l<<" r: "<<r<<" m: "<<m<<endl;

if (check(m))
l = m + 1;
else
r = m;
}

return r;
}

/// @brief 二分答案(左闭右开,向右寻找)
/// @tparam T 数字类型
/// @param l 左初始值
/// @param r 右初始值
/// @param check 检查答案在左还是右的函数,若true则向右移动,否则向左移动
/// @return 答案
template <typename T = int>
T baR(T l, T r, bool (*check)(T))
{
while (l < r)
{
T m = (l + r + 1) >> 1;

// cout<<"l: "<<l<<" r: "<<r<<" m: "<<m<<endl;

if (check(m))
l = m;
else
r = m - 1;
}

return r;
}

一段简单的代码,为hexo增加了一个tag-plugin,实现一些可以复用的模板。

代码

template.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
'use strict';

var fs = require("hexo-fs");
var pathFn = require("path");

var template = function (args) {
let filename = args.join(" ");
let path = pathFn.join(hexo.source_dir, "templates", `${filename}.md`);

return fs.readFile(path).then(content =>
hexo.post.render(path, { content: content, _content: content }).then(value =>
`<div class="hexo-template ${filename}">${value.content}</div>`
)
);
}

hexo.extend.tag.register('template', template, { async: true },);
hexo.extend.tag.register('tpl', template, { async: true },);

食用方法

  1. 在./scripts文件夹中创建template.js文档并复制以上内容
  2. 在./source文件夹中创建templates文件夹
  3. 在新建的文件夹中创建需要的模板,文件需为markdown文件,如foo.md
  4. 使用{% template <filename> %}{% tpl <filename> %}插入模板,如{% tpl foo %}

实例

source/templates/constructing.md
1
2
3
4
5
6
7
8
9
10
11
12
{% note warning %}

**“请、、请您稍等!!就、、就快好了!”鱼干抱住,并企图藏住这个页面,说道。**

此页面正在 **施工中……**

您可能会看见 **如下内容** 出现在此页面中:
- 一只忘记带安全帽的鱼干(只是是找不到了而已
- 一些**杂**物被**鱼**干随意堆放( ~~简称**杂鱼**~~ ~
- 一个“此页面正在 **施工中……** 的标志牌⚠”(虽然鱼干不觉得有谁会看见,但万一呢……

{% endnote %}
templates-for-hexo.md
1
{% tpl constructing %}

效果如下

“请、、请您稍等!!就、、就快好了!”鱼干抱住,并企图藏住这个页面,说道。

(才不是没写完就发出来了

此页面正在 施工中……

您可能会看见 如下内容 出现在此页面中:

  • 一只忘记带安全帽的鱼干(只是是找不到了而已
  • 一些物被干随意堆放( 简称杂鱼 ~
  • 一个“此页面正在 施工中…… 的标志牌⚠”(虽然鱼干不觉得有谁会看见,但万一呢……

“请、、请您稍等!!就、、就快好了!”鱼干抱住,并企图藏住这个页面,说道。

(才不是没写完就发出来了

此页面正在 施工中……

您可能会看见 如下内容 出现在此页面中:

  • 一只忘记带安全帽的鱼干(只是是找不到了而已
  • 一些物被干随意堆放( 简称杂鱼 ~
  • 一个“此页面正在 施工中…… 的标志牌⚠”(虽然鱼干不觉得有谁会看见,但万一呢……

一些问候语,也许可以安放在网页的某个角落…?

  • 早喵~ 今天也是充满活力的一天呢~ (=^・ω・^=)
  • 午安~ 想干点什么嘛~ (,,>ω<,,)
  • 晚上好~ 累了嘛?鱼干会一直在你身边哦ฅ^⩊^ฅ
  • 夜深了~ 想要来鱼干的被窝玩嘛 ~ (⁄ ⁄•⁄ω⁄•⁄ ⁄)
  • 早点睡哦~ 熬夜对健康不好(比叉)
0%