题目链接
题目大意
给定$n$个区间,请挑出$k$个区间,使得他们的交集长度达到最大。区间的长度定义为这个区间的右端点和左端点的差。
题解
- 不难得出,我们可以先按照
区间的开始
进行排序。 - 然后维护一个有$k$个元素的堆(小根堆),里面存的是
区间的结束
- 统计答案:当堆里有$k$个元素时,答案就是
堆顶
减去当前区间的开始
(因为区间的开始已经是升序的了)
代码
1 |
|
给定$n$个区间,请挑出$k$个区间,使得他们的交集长度达到最大。区间的长度定义为这个区间的右端点和左端点的差。
区间的开始
进行排序。区间的结束
堆顶
减去当前区间的开始
(因为区间的开始已经是升序的了)1 | #include <iostream> |
之前想到:博客一次写作,多地发布,于是边有了这个项目:选择性同步Hexo与博客园。
GitHub链接:https://github.com/JeffersonQin/hexo-cnblogs-sync
在themes/next/layout/_macro/post.swig
中,选择合适的地方加入:
1 | {% if post.cnblogs %} |
这样的话,如果要同步,只需要控制文件头就可以了,类似于本文:1
2
3
4
5
6
7
8
9
10
11
12
13---
title: 博客园与Hexo同步发布的方法
date: 2020-09-15 00:31:57
tags:
- Hexo
- Blog
- cnblogs
- python
- html
- css
categories: Hexo
cnblogs: true
---
先扫描一遍public
文件夹里的输出文件:
1 | orig_dir = "../public/" |
然后使用BS4来操作HTML和CSS
1 | # Filter the articles that are to be synced |
上面的大多数代码基本上都需要具体情况具体分析,分析生成的HTML和我们需要的代码之间的关系。值得注意的是,math_blocks
的那一段代码是巧妙地解决数学公式mathjax
只渲染到<script>
的问题的。(直接匹配再用$$$$替换,这样可以直接使用博客园的markdown进行渲染,毕竟markdown可以兼容html)这里面,header
是我根据这套Next主题自己扒的,源码在我的GitHub上有(链接在本文文末)
博客园可以使用MetaWeblog接口,不过categories有点问题,不太能使用。
原作:https://github.com/1024th/cnblogs_githook
但是在删除接口方面存在问题,这里进行了更改。
1 | import xmlrpc.client as xmlrpclib |
在生成新的html文档之前,先删除旧的(除了.git
目录):
1 | if os.path.exists(repo_dir): |
下面是封装好的gitpython
的class
:
1 | import git |
剩下还有一些细节:包括本地化文章ID等就不在本文内过多赘述,这里只提供大致思路,具体代码详见Github
如果发现中文转码出现问题,记得运行下面这行命令:1
git config --global core.quotepath false
1 | git config --global core.quotepath false |
自从被生下来开始,就是欠别人的。
要是没被生下来就好了呢。
自己如何努力到头来会被一句“还不是因为我 xxx”全部掩盖
就算努力让自我提高了
这样活着好累啊。
好累啊。
提前社会教育对吧。
属实强。
但做了那么多有用吗。
结果还不是一样吗。
达不到目的发泄在我身上。
我从一开始就没什么指望。
从最开始就已经看到了结束。
所以我什么都没说。
但是不需要我说还是发生了。
所以都无所谓了。
本来都决定了要好好学习的呢。
被骂了以后又不想学了。
明明是自己的事情才对。
为什么那么容易被别人影响呢。
好烦啊。
为什么出生之前没有人询问过我的意见问我想不想被生下来。
没被生下来就好了呢。
什么都不用做什么都不用想。
消失了就好了呢。
之前使用Valine
,但是一直苦于别人评论我并不能第一时间知道,便倒腾了一个早上的Valine
邮件提醒功能。但但但但是,免费版的Valine
会强制休眠,我便另寻他道。
项目主页:https://github.com/gitalk/gitalk
引用:
Gitalk is a modern comment component based on GitHub Issue and Preact.
打开themes/next/_config.yml
,找到Gitalk
部分:1
2
3
4
5
6
7
8
9
10
11
12gitalk:
enable: true
github_id: <repo-owner> # GitHub repo owner
repo: <repo-name> # Repository name to store issues
client_id: <client-id> # GitHub Application Client ID
client_secret: <app-secret> # GitHub Application Client Secret
admin_user: <admin> # GitHub repo owner and collaborators, only these guys can initialize gitHub issues
distraction_free_mode: true # Facebook-like distraction free mode
# Gitalk's display language depends on user's browser or system environment
# If you want everyone visiting your site to see a uniform language, you can set a force language value
# Available values: en | es-ES | fr | ru | zh-CN | zh-TW
language: zh-CN
github_id
:储存项目的用户的GitHub用户名repo
:储存issue
的repo
client_id
& client_secret
:这里申请 submodule
介绍submodule
,即子模块,在项目中添加一个submodule
就相当于引用了一个别的repo
,记下来我将分别针对不同的情形展开讨论
submodule
在main project
当中:1
git submodule add <submodule_url> <path>
其中,submodule_url
为submodule
的repo
地址,path
为接下来clone
的地址。运行之后,会发现目录下多出了.gitmodule
文件。
clone
了一个项目,添加为submodule
和上面一样:1
git submodule add <submodule_url> <path>
submodule
内的代码首先明确一个概念:submodule
是一个独立、完整的repo
。这意味着,你可以像往常一样在submodule
的根目录下进行add/commit/push
,这都是完全没有问题的。但是,如果submodule
没有commit
,主项目是无法commit
的,所以如果要commit
主项目,首先要确保submodule
内各个项目都没有问题。在此之外,当submodule
内已经好了之后,我们便可以commit
主项目,并可以发现主项目当中submodule
是作为一个整体来计算的。
submodule
写在一个子模块:1
git submodule deinit
如果:1
git submodule deinit --force
那么即使本地repo
有未提交的更改也会被移除. 上述命令是删除.git/config
中的配置文件,若要继续删除本地的文件:1
git rm <submodule>
来删除。
操作完毕之后我们发现主项目就有更改了,进行commit
来提交更改:1
git commit -m "Deleted the submodule project."
submodule
有远程更新1 | cd <path> |
如果有多个submodule
,可以:1
git submodule foreach 'git pull origin master'
clone
带有submodule
的项目1 | git clone <repo-url> --recurse-submodules |
或者:1
2
3git clone <repo-url>
git submodule init
git submodule update
之前在做文件备份的时候,对于博客文件夹总是十分烦恼。由于一直在更改,百度云热备可能会出问题,然而我这个人冷备这种事绝对会忘,遂出现了本文。
一开始我是准备整个项目直接扔到GitHub
上面去的,但是很不巧,出现了报错,提示了submodule
问题。出现了这个问题之后,我就决定好好整理之前杂乱不堪的工程文件。
按照之前的教程(在Hexo分类下的建站指南),新建Hexo项目
包括_config.yml
等,同步一下,注意版本之间的差异
在博客的工程文件下,直接进行git init
,到现在位置的话应该还不会产生问题。
由于Next主题是开源的,我们不妨直接Fork。这里建议是私有Clone一下,因为毕竟要储存一些密钥啥的。
在博客
工程文件的git
里面add submodule
,详细用法参加之前写过的一篇git submodule
文章(在git
分类下)
由于升级之后和原来的版本差异较大,这里就可以利用git
的版本控制优势,良好地筛选出配置文件变动很大的地方。
就是把之前所有的文件直接copy/paste,不会遇到什么大问题。
接下来其实就和平时使用git
没什么区别了,只不过submodule
也是一个独立的git
,所以我们要分别进行版本控制。
Hardcodet.NotifyIcon.Wpf
这个是使用系统托盘图标来完成通知的推送的,前半段请参照这里
推送通知的例子:1
App.TaskbarIcon.ShowBalloonTip("UIToy Notification", "Window Rect is null.", Hardcodet.Wpf.TaskbarNotification.BalloonIcon.Error);
这里我直接把TaskbarIcon
当作全局的静态变量定义在App.xaml.cs
里面了。
Notifications.Wpf
具体用法可以参见作者GitHub:https://github.com/Federerer/Notifications.Wpf
例子:1
2
3
4
5
6
7MaskWindowManager.notificationManager.Show(
new NotificationContent
{
Title = "UIToy Notification",
Message = "UI Analyzation Started.",
Type = NotificationType.Information
}, areaName: "WindowArea");
在项目中想要直接调用系统的截图工具,毕竟这样感觉有原生的流畅丝滑般的感觉(雾),但是几经查找并未找到API,所以便萌生了直接模拟系统快捷键进行实现。在Windows10当中,截图工具的快捷键为Shift + Win + S
,故模拟即可。为了以后方便调用,我将这些函数抽象成了工具类
由于在C#当中,系统提供的Key的数值和ASCII码里的不太一样(当初就在这里被坑了),所以就Enumerate了一下。(码分之所以前后有区别是因为前半段是使用代码直接生成的,C++的语法糖好好吃)
1 | using System; |
直接使用char
来获得VirtualKey
:
1 | using System; |
1 | using System; |
1 | KeyPress(VirtualKey.VK_LSHIFT); |