【★】Welcome Post

Post updated on 2020/1/18

Welcome to XGN’s Personal Blog /欢迎

As a sequal to the XGN’s previous (dead) blog and HHS’s blog, this page will be my new own personal space! Hooray!!

欢迎欢迎!!

Only articles with “English” tagged will be available in English

只有标记了”Chinese”标签的文章才会有中文。

What to post /发什么

Mainly something more personal, like game/music reviews, status, furry and personal OC. I will also temporarily put ZKY’s articles here. Please also stay tuned for HHS Blog as I will post stuffs there too!

主要是一些更私人化的东西,比如游戏/音乐评论,状态,furry和个人OC。我还会暂时将ZKY的文章放在这里。请继续关注HHS博客,因为我也会在那里发布文章!

You may see the blog isn’t maintained often and I don’t really post blogs on HHS Blog often either. You can assume I will only put stuffs here now. Still, whenever there’s something I post on HHS Blog that is really important and personal, I will post it here or make a hyperlink too!

你可能会看到博客不经常维护,我也不经常在HHS博客上发布博客。你可以假设我现在只在这里放东西。尽管如此,每当我在HHS博客上发布一些非常重要和私人的东西时,我都会在这里发布或者做一个超链接!

How to post /怎么发

This page is powered by Github Page. It’s built using Hexo and Github Workflow to auto deploy.

此页面由Github页面提供支持。它是使用Hexo和Github工作流来自动部署的。

Link / 友情链接

HHS Blog

Game Review

Further Reading / 更好的了解我?

Further Reading: How to know my OC/如何了解我的原创角色

Further Reading: More about me/关于我自己的更多琐事

一种基于维护高度的无递归、无栈、无parent指针的AVL树实现方式

引入

AVL树有种种实现方式,其中最自然的是采用递归的写法,毕竟AVL树是递归定义的。但是,有的老师认为“递归时间常数大”,觉得应该用迭代。但是,还有老师认为迭代要用栈,“栈空间大(指占用了 )空间”,不能用栈。自然,我们可以用parent指针规避掉这一问题,但是显然parent指针需要使用的额外内存更大,这位老师还是不喜欢。所以现在我们被要求实现三无AVL——无递归、无栈、无parent指针。

AVL树的维护方法有两种:维护高度和balance factor(BF)。笔者认为Balance Factor不够优雅、泛用性低、过于特殊化,故采用维护高度的方式。

所以,本文认为,三无AVL实现的重点在于 快速的维护每个节点子树的高度

Read More

Building a Clear Programming Language for Newcomers

This is a joke

Introduction

Many new programmers are often confused about a very important concept in programming: the variable lifespan. For example, one could not understand why the variable “a” is “not defined” when it’s clearly there:

1
2
3
4
5
6
int x=3;
{
int a=4;
}

a; //Compile Error

Another problem newcomers face when they are first presented callback functions are that they are not able to convert sequential code into callback functions. When the program gets complicated, it is common for a professional programmer to combine the callback functions and sequential coding. When this happens, newcomers may not know the correct order of execution, leading to frustration.

One more problem comes from the “impossible” mission for coding: naming things. Professional coder might use what are called “defensive programming” by naming variables weirdly, like just calling them q fa wps sht etc.

In order to make programming more accessible to beginners, we have developed the latest programming language: CLang!

Read More

Displaying Attachment PDF with Frontend Javascript

背景

笔者最近在参加某校在线平台前端的开发,收到了这样的要求:

将服务器传输过来的文件尽可能(图片/PDF)在网页中就显示下来,这样就不用下载了!

笔者劈里啪啦敲下了如下代码(由于渲染问题,美元符号已替换为人民币符号!!!):

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
var xhr = new XMLHttpRequest();

¥.ajax({
url: 'download_link',
type: 'get',
data: {},
xhr: function () {
return xhr;
},
success: function (r) {
const params = new URLSearchParams(xhr.responseURL);
const para1 = params.get('filename');
console.log("Returned url:"+xhr.responseURL);
console.log(para1);

if (para1 == null) {
¥('#fast_load').text('');
return;
}

if (para1.endsWith(".png") || para1.endsWith(".jpg") || para1.endsWith(".gif") || para1.endsWith(".bmp")) {
¥('#fast_load').html(`用户上传的图片(为正常显示,已缩放。请点击下载按钮下载原图。)<br/><br/><img src="¥{xhr.responseURL}" style="max-width:600px;width:100%"/>`);
return;
}

if(para1.endsWith(".pdf")){
¥('#fast_load').html(`用户上传的PDF<br/><br/><object class="pdf" data="¥{xhr.responseURL}" width="100%" height="1500"></object>`);
return;
}

¥('#fast_load').text(`用户上传了文件:¥{para1},请按下载按钮下载。请注意:本网站不对用户上传内容进行检查,文件有可能包含恶意内容。`);
}
});

上述代码可以正确分辨并显示各种常用类型的图片文件,然而pdf文件则会直接下载,不会显示在object中,令人迷惑。

Read More

YZHT Ep.3 简单最小割

呃呃,笔者最大流水平真是哈哈了,请见本题:

104871C

一眼网络流,怎么构图?

Hint:有费用的网络但是不是最小费用流?那就考虑一下最小割吧!

一个蛋糕可以考虑成:选择蛋糕->选择工具。一个蛋糕被创造需要:选择蛋糕、选择所有工具。「所有」二字让我们考虑最小割!

割蛋糕=不做蛋糕,做了蛋糕就必须割工具,表示选择工具。easy!

YZHT Ep.2 少见的三分

题目:给出一个圆和两点,求这两点间最短路线的距离,要求路线经过圆内部或边上的任意一点。

链接:104871G

如果两个点有一个在圆内(上)就好了……

如果两个都在圆外,设经过的圆上一点有仰角,那么注意到答案关于一定只有一个极小值。就可以三分了!

难度不高,但是可以复习一下三分法。
三分法的分析:OI-wiki

听说也可以分析凹凸性用二分就可以完成?

YZHT Ep.1 最大流+图论优质好题

欢迎来到YZHT系列,这个系列我将分享我遇到的OI好题。

第一题

笔者最近正在学习数学图论,但是在OI中正巧碰到了这样一道从来没见过的最大流题。虽然难度不大,但是思路比较新:

Problem B of 2023-2024 ICPC Southwestern European Regional Contest (SWERC 2023)

顺便说一下这一场欧洲的题可能机子不太行,特别喜欢把时间和内存锁的很紧,A题卡了我一小时常熟,笔者表示强烈谴责!

这道题一看网络流,但是笔者第一眼思考了很多传统的建图方式都没有想出来。但是,它本质上其实是一个二分图的最小顶点覆盖,而二分图中有Konig Theorem,就可以把他转化为最大匹配问题,而最大匹配问题又可以转化成最大流,做完了!

所以现在最大流不仅要考虑建图、最小割转化、最大匹配转化,还要尝试一下最小顶点覆盖转化。话是这么说,做题切忌陷入形式当中。