因为使用 KMS 或绑定多用户的原因,Office 界面可能会出现多个授权信息,形成冲突。
- 访问 Office 安装目录
- 以管理员权限执行指令
cscript ospp.vbs /dstatus
查看当前在册授权 - 记录失效 License 的后五位字符
- 以管理员权限执行指令
cscript ospp.vbs /unpkey:[Last 5 chars of license]
注销授权
因为使用 KMS 或绑定多用户的原因,Office 界面可能会出现多个授权信息,形成冲突。
cscript ospp.vbs /dstatus
查看当前在册授权cscript ospp.vbs /unpkey:[Last 5 chars of license]
注销授权n = -n;
进行数值正负转换数值在内存中是以补码的形式进行存储的,因此 int
的数据范围为 [-2147483648, 2147483647]
,左右边界不对称。
当题目中声明所有数据均在 int
范围内时,应当警惕使用 n = -n;
:如果值恰好为下界 -2147483648
,则运算后结果仍为 -2147483648
。
不同语言中对于除法的实现算法不同,Java 和 C/C++ 中使用 truncate 除法(截断小数部分),Python 中使用 floor 除法(向下取整),因此负数取模的结果也不相同。
为了保证一致性,建议使用 (n + m) % m
的方式进行取模。
p.s. Ceiling 是向上取整。
从 Git – Downloads 下载最新版本的 Git 客户端。
运行 Git Bash,执行 ssh-keygen -t rsa -C “[your_email]@domain.com”
创建密钥对,得到 id_rsa.pub
公钥文件与 id_rsa
私钥文件。(务必妥善保管)
参考 私人 GitLab 使用方法 中的 “SSH 配置” 章节,将公钥内容添加至自己的 GitLab 账号。
访问原始项目,点击中央的 fork 按钮,克隆一个分支至自己的账号。
访问自己刚刚 fork 出的分支,复制页面中间格式为 [email protected]:[username]/[project_name].git
的字符串。
在本地计算机上找到你想存放本项目的目录,例如 D:\Programs\
,在 Git Bash 中执行 cd [绝对路径]
的方式跳转至该目录,例如 cd D:/Programs
(注意前后斜杠的变化)。Windows 用户也可以直接打开该文件夹,右键点击空白区域,点击 Git Bash Here
,在该文件夹中打开 Git Bash。
配置 Git 用户名和邮箱
1 | $ git config –global user.name "username" |
执行 git clone [刚刚复制的字符串]
,将项目克隆到本地。
访问本地仓库,执行 git branch -a
浏览分支列表。
执行 git remote -v
查看 origin
是否为自己的远程仓库
执行 git remote add upstream [原始项目的 git 地址]
添加原始项目为同步源。
执行 git remote -v
查看 upstream
是否为原始项目。
执行 git fetch upstream
同步仓库。
执行 git checkout master
切换到 master
分支。
执行 git merge upstream/master
将原始项目的最新更改同步至本地。
执行 git push origin master
将本地仓库同步至自己的远程仓库。
执行 git checkout dev
切换到开发分支。
使用 Eclipse 打开项目,开始开发工作。
结束工作,执行 git status
查看修改过的文件。
执行 git diff
或者 git diff [filename]
比对文件改动,做最后检查。
执行 git commit -m “[注释]”
提交修改到 暂存区。
执行 git push origin dev
将本地的开发分支提交至自己的远程仓库。
完成一个阶段性任务(程序功能)后,在 GitLab 页面上发起 Pull Request,项目主管将进行 Code Review 并提出修改建议,通过后将合并至主仓库。
master
分支同步至本地(在本地的 master
分支中使用 git fetch upstream
然后 merge)。dev
分支进行开发。(同步方法见上方)原始的 2-Way 快排在遇到大量重复数据时会退化为 O(n^2)
,为了解决这个问题,3-Way 快排被提出了。通过将区间分割为“小于”、“等于”和“大于”(基准数)三个部分,获得了趋近 O(nlogn)
的复杂度。不同于 2-Way 快排的是,我们在此选取一个基准数的值,而非一个基准元素。
(小声逼逼:当然为了方便也可以直接改进 2-Way 快排,在每一次基准数归位后遍历全区间元素,将等于基准数的元素交换到基准数旁边,也能获得等价的三个区间。当然,效率相对于 3-Way 快排有所下降,代码实现的复杂度也上升了。)
使用 i
下标表示“小于”区间的上界;使用 q
下标表示“等于”区间的上界;使用 j
下标表示“大于”区间的下界。
arr[q]
与 pivot
的关系: 如果小于 pivot
,交换 arr[i]
与 arr[q]
,q
自增,i
自增 如果大于 pivot
,交换 arr[j]
与 arr[q]
,q
** 不变 **,j
自减 如果等于 pivot
,q
自增q
、j
相遇。1 | public static void swap(int arr[], int a, int b) |
打开 Window -> Preferences -> Java -> Editor -> Content Assist,将 Auto Activation triggers for Java 的值由 .
修改为 .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
即可。
https://github.com/Wind4/vlmcsd/releases
下载 latest releasetar -xzvf binaries.tar.gz
解压各 KMS 激活密钥见 KMS 客户端安装密钥 | Microsoft Docs
slmgr /skms [服务器地址]
slmgr /ato
slmgr /xpr
注意:
1. 仅 VOL 批量许可版本的 Windows 支持 KMS 激活
2. KMS 激活有效期为 180 天(半年),到期系统会自动向 KMS 服务器更新状态。
3. 不可激活旗舰版 Windows 7
4. 手动安装密钥 slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx
5. Windows 下载见 MSDN 我告诉你
cscript ospp.vbs /sethst:[服务器地址]
cscript ospp.vbs /act
cscript ospp.vbs /dstatus
注意:
1. 仅 VOL 批量许可版本的 Office 支持 KMS 激活https://otp.landian.la/en-us/
2. Office 下载见 Office Tool Plus
快速排序(Quick Sort)因其 $O(NlogN)$ 的复杂度成为最常见的算法之一,甚至被纳入了 C++ 的标准库作为 std::sort 的一部分与插入排序糅合在一起以实现更优的时间复杂度。
在学习快速排序算法之前,让我们首先回顾最经典的排序算法——冒泡排序:经过 $(N-1)!$ 次比较,以 $O(N!)$ 的复杂度完成排序。由于冒泡排序每次只比对相邻的两个元素,所以排序效率相对比较低。
快速排序的优势在于,应用了分治的思想(有点像二分),通过多次迭代将元素依次归位,最终完成排序。单元操作如下:
经过以上过程后,基准数左侧的元素均小于等于基准数,基准数右侧的元素均大于等于基准数。接着通过迭代的方式,将此时基准数左端区域与右端区域分别进行下一轮排序操作。当区间内只剩下一个元素时,结束当前过程。
注意:
一、快速排序中扫描时 必须从基准数的对面开始。
原因:允许交换的前提:
1. 有 arr[r] < arr[L];
2. 有 arr[l] > arr[L]。
如果从左边开始,则在 l 与 r 相遇时可能只满足了 2 但未满足 1,此时基准数 arr[L] 与 arr[l](arr[r])发生交换,导致一个大于基准数的值被放在了最左。
二、基准数归位后就固定了,接下来分治排列 [L, l – 1] 和 [l+1, R] 即可。(此时 r == l)
对于原始的快速排序,由于每次都从固定的一端选取基准数,当遇到有序序列时,可能会导致基准数归位后其余元素都在基准数的某一侧,而另一侧没有元素的情况,最终导致排序性能退化。为了避免这种情况出现,我们需要引入一个随机化操作来打乱有序序列:在当前区间内随机选取一个元素与基准数交换,然后以其作为新的基准数。示例代码如下:
1 |
|
早晨
一大早便被鸡鸣声唤醒,晨光与虫鸣从窗户涌进来。我所在的宿舍总共居住了四个男生,除一人来自美国以外,剩下三人都是同行校友。
宿舍内
每个床旁边有两个插座,一人一个。考虑到白天在营地时间较少,建议志愿者们除了必备的转接插头以外还要携带一个插线板以给手机、移动电源等电子产品同时供电。
餐厅
来自不同国家的志愿者们陆陆续续地起床了,聚集在餐厅里享用早餐。
就我们所在的营地情况来看,志愿者分布有以下特征:
1. 女性志愿者人数远多于男性志愿者,比例超过 6:1。
2. 志愿者年龄分布集中于 20~30 岁之间。
3. 来自欧美国家的志愿者人数巨多,中国其次。
4. 素食主义者占有一定比例。
营地内的庭院
庭院里架空的树屋是提供给志愿者的吸烟室,时常能看到志愿者在院子里吞云驾雾。最右边的小屋是 GreenLion Cafe,白天营业时向志愿者们销售零食、饮料。
早餐品种还算丰富,有咖啡、香蕉、土司、炒蛋、木瓜以及南瓜饼。
早餐
上午的活动为巴厘岛文化介绍,coordinator 讲述了当地的文化禁忌以及 GreenLion 营地的志愿者规章。午餐后,大家简单休整了一会,便坐车前往乌布开展下午的活动。
午餐
乌布皇宫
抵达乌布后,我们步行游览了乌布皇宫、乌布市场以及圣猴森林公园。
乌布街景
乌布皇宫不大,游览过程几分钟边草草结束。两旁的雕塑与墙壁的蚀刻很是精美,这种石饰在巴厘岛各处都能够见到。
乌布市场
乌布市场与国内的景区摊点别无两样,卖一些当地的木雕、廉价食品、香薰、手工箱包等。需要注意的是,当地景区和小商店商品的价格均为虚标,建议先砍价至原价的三分之一,然后与商贩慢慢谈价。
街边的民宿
在圣猴森林公园附近,随处可瞧见猴子在房顶戏耍。
圣猴森林公园附近
公园内的石雕
公园内的榕树
公园一景
吃东西的猴
晚上组织观赏了印度教舞蹈节目,众人围坐在篝火外,地面上坐着一群赤裸上身的男子,耳朵上佩戴有花,口中有节奏地喊着jiajiajiajia,十分魔性。
舞蹈
舞蹈
第一天的活动就此结束了,回营地路上让司机载我们去了顺路的 Mini Market(当地的便利店,类似的还有 Coco Market),采购了一些零食和伴手礼。
今天的活动为印尼语学习和 painting class。
印尼语学习
印尼语学习
掌握了一些词汇后,coordinator 便组织了类似击鼓传花的游戏,被抽中人需要用印尼语说出指定的数字,答对后可以获得一块橡皮糖。
餐厅一侧的白板上写有午餐的菜单,炒粉丝、煎蛋、土司、菠萝以及蛇皮果。
午餐菜单
午餐后,我们乘车来到了几公里外的染坊渲染昨日的半成品。令人惊喜的是,我们的布已经被工作人员用金色燃料重新勾勒了花边,未经染色的形象就已跃然布上。
染坊
浸湿后的布仍然会让一点颜料渗透过花边,有些志愿者会选择为其染上背景色来盖过渗透出的颜料。
染布
我的作品是一丛莲,透过荷花的花瓣,莲蓬露出一点点。由于染料还未风干,所以布面看上去颜色较深。
莲
结束染布后,我们先让司机载着去了附近的 Mini Market 采购了一些伴手礼和冰淇淋,然后去了“在当地司机中口碑不错”的一家餐厅。餐厅环境不错,坐落在田间,有着一个很大的后院和停车场。在这里,我们品尝了巴厘岛最负盛名的脏脏鸭以及当地特色串烤肉。这里的巴厘岛风味与国内中餐厅当然无法相比,不过也算是可以接受。
脏脏鸭
烤制后的鸭肉肥而酥,旁边还有几块虾片点缀。在巴厘岛,虾片是十分常见的配菜。
烤肉
烤肉下方是些许炭火。
早餐有香肠、法棍、土司、煎蛋、香蕉、木瓜和牛奶。速溶咖啡是全天供应的,在餐厅自取。
早餐
上午的活动仍然是学习印尼语,不少志愿者翘了课程而是去泳池边晒日光浴,只剩下十几个志愿者在坚守(一半以上是国人)。
学习印尼语
下午是关于海龟保护项目的介绍,以及项目所在地 Nusa Penida 岛的一些基本情况。
晚餐去了位于乌布中心的 Pundi Pundi 餐厅,品尝了布朗尼甜点和椰汁鲜鸡汤。
椰汁鲜鸡汤
布朗尼
Pundi Pundi
上午唯一的活动是学习印尼本地菜肴的制作。
早餐过后,众人盘坐在另一间堂屋的长桌旁,每人一套刀具切蔬菜与佐料,以及将当地的一种有点酸味的豆制品切块。
注意:豆制品在温度较高的环境下极易变质,尽量不要使用这个豆制品。
烹饪
烹饪
午餐
午餐
下午,在 coordinator 的带领下游览了周边的村庄和梯田。
农田
同行的两只小狗在田里追逐鸭群取乐。
鸭群
神庙
神庙坐落在崖的高处,需要攀登一个陡峭的石梯才能抵达顶部。一旁还有一注山泉水。
合影
嗯…当地人为我们拍摄的照片总是失焦,建议自备自拍杆。
小溪
艰难跋涉十余分钟,终于到达山脚的小溪。一根断裂的横木倒在岸边,树枝倚在水里。一些提前换好泳衣的志愿者直接跳入了小溪里游泳,其他人则在岸边合影。
傍晚
傍晚
傍晚的 GreenLion 营地与稻田。
party
party
晚间是 GreenLion 营地的每周 Party,共同欢送第二天就要结束项目的志愿者们。食物有冰牛油果青柠茶、米饭、炒面、黄焖鸡肉、胡萝卜和由豆制品制作的烤串。晚餐过半时,coordinator 宣读了即将结束旅程的志愿者名单,他们依次起身,在大家的掌声与欢呼中抒发了自己在这段志愿服务经历中的感慨。
祈祷是印尼人生活的重要组成部分,他们祈祷一切能为之感谢的事物。人们用椰树叶与各色鲜花制作出一个个精致的小盒子,这便是被称作为“Banten”的贡品。今天的活动之一便是亲手制作一个“Banten”。
将裁切好的椰树叶盘成方形,用细茎穿刺固定;取两片茎垫在底部,也固定好,然后依次摆上各色的花瓣,一份“Bentan”便制作完成了。
圣泉寺内的水池
收集好制作的“Banten”,一行人乘车前往巴厘岛最著名的庙宇之一:Tirta Empul 圣泉寺。传说这里是由神所创造的泉水,在圣水里洗礼可以获得神灵的庇护、祛除疾病,由此吸引了巴厘岛各地的印度教信徒。除了他们之外,世界各地的游客也为一睹圣泉的景色而来到这里,一齐穿上 Sarong 浸泡在泉水中,感受着宗教文化的魅力。
圣泉寺里,信徒坐在地面上祈祷
寺庙内建筑的装饰十分精美,宗教元素的蚀刻自上而下遍布木质的支柱。
圣泉寺内建筑的屋顶
由于回程车辆安排的缘故,我们八人被拆散了,最终错过了原定于周五下午前往 Bali Swing 巴厘岛网红大秋千的行程,只得返回营地集合后再外出就餐。
我们首先乘车去了位于巴厘岛南部库塔的 DPS T 广场 免税店,采购了一些伴手礼。Java 爪哇岛是印度尼西亚的岛屿之一,出于对名称的好奇,我便购买了几包“Java Tea”和“Java Coffee”。就在 T 广场的东侧约一公里处,还有家乐福和 Logo 神似步步高的 Hypermart。免税店中食品、香薰等非奢侈品物品的价格较周边超市及商场贵几倍以上,机场内更甚,因此建议在免税店只购买奢侈品,对于平价商品或伴手礼则前往旁边的家乐福或 Hypermart 选购。
包装十分精美的 Java Tea
夕阳里道路旁的雕塑
晚餐位于库塔一个羊肠小径内的 Poppies Restaurant,依照 Google 导航的指引,步行约二十分钟最终抵达。在这里,我们享用了抵达巴厘岛以来最美味的晚餐。
从一个类似于四合院门的入口进入,视界豁然开朗。
进入餐馆后的景象
餐厅里坐满了来自世界各国的游客
我们点了猪扒、海鲜拼盘、西红柿汤、起司烧鸡、杂烩鸡汤、木瓜海鲜拼盘等等,每一道都是色香味俱全。
全桌菜肴
木瓜海鲜拼盘
起司蘑菇烧鸡
海鲜拼盘
账单
平均每人约 130 人民币,账单换算成印尼盾足有一百多万…
由于天气原因航班延误了约六小时,直至中午两点才起飞。抵达深圳后,已有南航工作人员在廊桥接应我们办理急转业务。最终于晚间11点半左右提前抵达巴厘岛努拉莱伊国际机场。
抵达到达厅后,先是进行移民局登记与旅游签办理(如果需要在当地停留一个月以上),随后提取托运行李、填写入境申请表,通过海关。耗时约一小时。
在机场出口我们成功与 Green Lion 接机人员碰头,分成两车前往营地。
巴厘岛的道路蜿蜒曲折,从机场前往 Green Lion 主营地约一小时路程(凌晨),抵达营地后已是凌晨两点。在营地门口,coordinator 为大家简要介绍了营地功能区分布与宿舍安排。我们所处的寝室为六人间,三对上下床,内有一个单独的洗手间与一个独立的厕所。房间内没有空调,但是有两架风扇。加上巴厘岛此时气候相对凉爽,所以室内温度还算舒适。简单的洗漱后,大家便进入梦乡,期待一早的行程。