Lilac Train Writeup

0 写在之前

应该是一场新手入门欢乐赛

打着也确实快乐,应该是我 CTF 比赛第一次做出 Oi 之外的题目

绝大多数知识点都在 CTF Wiki 上,剩下就是脑洞了

管他呢,mcfx txdy!

1 PWN

1 坤坤の地址

同志,用 Linux!

然后就是 nc 一把梭

$ nc 47.94.239.235 4001
welcome to Lilac@HIT
Here is kunkun's address:
flag{zonghelou_714}

2 坤坤の唱

放进 IDA 去,一看,就是打开 $signer/$music,不允许你写 ../

然后 Hint 告诉你要访问 ../flag

然后就是傻逼题目了

nc 47.94.239.235 4002
input the singer's name:
..
input the song's name:
/flag
here is the lyric:
flag{w0w_you_successfully_escape_the_r3strict}

3 坤坤の石头剪刀布

打开一看,发现 rand() 函数的种子是 time()%10

那为什么要动脑子,写个种子是 0 的情况

试一下就行了

#include <cstdio>

int num = 0;

int myRand() {
    num = (num * num + 233) % 23333;
    return num;
}

void mySrand(unsigned int seed) {
    num = seed;
}

int playOnce() {
    fflush(stdout);

    int ai = myRand() % 3;

    if( ai == 0)
        return 1;
    if( ai == 1)
        return 2;
    if( ai == 2)
        return 0;
}

int main() {
    mySrand(1);
    int n = 100;
    while( n -- ) {
        printf( "%d\n", playOnce() );
    }
}

然后直接拿输出日服务器就行了

4 坤坤の篮球

题目给了二进制,大力 IDA

IDA 告诉我们 Hint,是根据 Target 位移出来的东西

简单的分析可以发现,基本上就是 8 位一截

然后写个程序大力草就行了

basket.cpp:

#include <cstdio>

#include <iostream>

int n;

int read() {
  int x = 0, w = 1; char ch = 0;
  while (ch < '0' || ch > '9') {  if (ch == '-') w = -1; ch = getchar(); }
  while (ch >= '0' && ch <= '9') { x = x * 10 + (ch - '0'); ch = getchar(); }
  return x * w;
}


int main() {
    while(1) {
        n = read();
        int u1 = ( 1 << 8 ) - 1;
        int tmp1 = n & u1;
        n >>= 8;
        int tmp2 = n & u1;
        n >>= 8;
        int tmp3 = n & u1;
        n >>= 8;
        int tmp4 = n & u1;

        int res = tmp1;
        res <<= 8;
        res |= tmp4;
        res <<= 8;
        res |= tmp2;
        res <<= 8;
        res |= tmp3;
        printf( "%d\n", res );
    }
}

//-1897606077
// 00011101110010011010100010000110./basket.run  0.00s user 0.00s system 0% cpu 2.026 total
// 
// Press ENTER or type command to continue
// 1133434084
// 10000111000111011010100111001000./basket.run  0.00s user 0.00s system 0% cpu 0.656 total
//
// 00011101 11001001 10101000 10000110
// 10000111 00011101 10101001 11001000
// 10001001 00011101 10101011 11000110

temp.py:

#!/usr/bin/python

from pwn import *

sh = process( './basket.o' )
rem = remote( "47.94.239.235", "4003" )

rem.recvline()
sh.sendline( rem.recvline() )
rem.sendline( sh.readline() )

for i in range (1,90):
    print( rem.recvline() )
    print( rem.recvline() )
    print( rem.recvline() )
    print( rem.recvline() )
    print( rem.recvline() )
    print( rem.recvline() )
    print( rem.recvline() )
    print( rem.recvline() )
    sh.sendline( rem.recvline() )
    rem.sendline( sh.readline() )

rem.interactive()

事后发现基本上随便乱输入就可以得到 flag

毕竟是 pwn 题

5 坤坤のrap

放到 IDA,读入量比字符串定义的多

直接多放点就过去了

$ nc 47.94.239.235 4004
请开始你的表演:
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
ncongrats, here is the flag
flag{stack_0verflow_is_annoying!!}
tql!!!

6 坤坤の舞

和上面的题目一样,都有溢出的漏洞

执行 get_flag() 函数应该会输出 Flag

那 pwntool 直接草就行了

扩展阅读: 栈溢出原理 – CTF Wiki

7 坤坤の绝地反击

和上面一样,还是溢出,但是这次要带个参

然后我直接按普通堆做

全然没有注意开了 NX 保护…

后来给了个 Hint

那就是大力 ROP 搞就行了

扩展阅读: 基本 ROP – CTF Wiki

2 RE

1 basicre1

逐位 Xor 加密,直接解

2 basicre2

代码就是对着 char 瞎jb位移

然后倒推一下,输出,没了

当时写了个 cpp 还原的,找不到了,不过本来就是签到题,不管了

3 basicre3

代码注释里表明这是个算法

目测 TEA 及其变种

网上找个解密的,没了

4 babyre

IDA 后基本上可以发现这是个 RC4 加密算法

然而我赛后才发现

想个办法把里面东西倒出来

发现程序调用了 memcmp,LD_PRELOAD 可以套到目标密文

RC4 具有自反性,在把目标密文放进去,得到明文,也就是 Flag

5 hundred

赛后 mcfx 爷提醒是个数组,还是个巨大线性方程组

我拿 IDA 打开,然后得到了一大堆 if 包裹的条件判断

Vim 随便处理一下就可以变成 z3 的 solve 函数的参数

然后放到 z3 里跑就行了

如果直接用 .model() 输出会输出不全,手动 .model().eval()

脚本太大了,这里是链接:https://blog.woshiluo.com/wp-content/uploads/2020/05/libac_re5.zip

我怎么写的这么多行?

Vim 宏真好用

3 WEB

这次的 WEB 题相比较别的真的好欢乐…

1 F12

curl -v 或者直接 F12 看 Header

2 i18n

extract 会覆盖变量,考虑覆盖 language_file

没了

3 ezsql

签到题,payload 是 admin'#

4 ezsql again

查看页面原码,得到 login.php.bak

发现 SQL 注入可能性基本为 0

我们可以使 $dbpassnull

发现进来的 $password 没有验证,不传就行了

5 where is flag?

题目给了任意读,但是扬了 flag

可惜 file 被 open 了,我们可以在 procfs 里找到

但是我们并不知道 pid

所以用一个科技 /proc/self

没了

6 ez_bypass

感觉这个比上一道简单

  • php md5 碰撞
  • php == 符号不需要相等
  • json_decode 后面会覆盖前面的

构造一下

curl http://47.93.34.105:8081/\?s\=QNKCDZO\&t\=240610708 -d 'pw=20200501", "password": "shouhukunkun'

没了

7 是什么蒙蔽了你的双眼

我确实菜

对着题目给的参数 base64 -d 三次,得到 flag.jpg

猜测参数就是查询套三次 base64

然后试图获取 index.php

发现替换了非字母且非.为空
替换 config!

扫描 .index.php.swp

提示看 f1lllaggg!lilac.php

然后代码审计 f1lllaggg!lilac.php

要么 extract 魔改 t,要么直接传空 t 可以过非严格判断

所以那个链接是干什么的,迷惑

4 CRYPTO

这次的比赛激起了我对 Crypto 的兴趣

前五题都是工具题目,没啥说的

合理运用 CyberChef 和 Wikipedia 即可

6 单表替换

https://quipqiup.com/ 爆破即可

7 CH₃COOH

题目说是原题,直接拖 Google

实际上是 Vigenère 密码,和醋酸的英文名几乎一样

然后找个工具爆破就没了

8 三天之内

查看源码,发现使用 Unix 时间戳做密码

Unix 时间戳就那么多,写个爆破就行了

from Crypto.Cipher import AES
#from secret import flag
import time
from hashlib import md5
import base64

time = int(time.time())
while 1:
    time = time - 1
    key = md5(str(time).encode()).digest()
    aes = AES.new(key, AES.MODE_ECB)
    flag = base64.b64decode( 'THM3FOB7PxOgVoI1fGsqQDJLGu41mL9nKCNeMvXzB+l8MFirir0C19YRS/ruDILq')
    outData = aes.decrypt(flag)
    print(outData)

跑个 30s,在输出里搜索一下 flag 就行了

9 神必 base64

基本上就是 b64 变种

映射一下就行了

#include <cstdio>

char mp[1000];

int main() {
    FILE* qwq = fopen( "qwq", "r" );
    FILE* cip = fopen( "cipher.txt", "r" );
    char s1, s2;
    while( fscanf( qwq, "%c", &s1 ) !=EOF && fscanf( cip, "%c", &s2 ) ) {
        if( map[s1] != 0 ) 
            continue;
        mp[s1] = s2;
    }
    for( char a = 'A'; a <= 'Z'; a ++ ) {
        if( mp[a] == 0 )
            printf( "0" );
        printf( "%c", mp[a] );
    }
    for( char a = 'a'; a <= 'z'; a ++ ) {
        if( mp[a] == 0 )
            printf( "0" );
        printf( "%c", mp[a] );
    }
    for( char a = '0'; a <= '9'; a ++ ) {
        if( mp[a] == 0 )
            printf( "0" );
        printf( "%c", mp[a] );
    }
    printf( "%c", mp['+'] );
    printf( "%c", mp['/'] );
    printf( "%c", mp['='] );

}

10 RSA – 0

RSA 原理题

直接解就行了

11 RSA – 1

n 变成三个质数相乘了,但是不影响我们解密

import binascii
import gmpy

p = 252647779892687905173761792949656998433
q = 290615416181922737045361451171930371659
r = 281613259213037257262703439109757908501
n = p * q * r
e = 0x10001
# rased = pow(flag, e, n)
rsaed = 1169612223485519024207841670191078798101684935551461601922416127588930439758194701318838707953651437973827125265577

phi = ( p - 1 ) * ( q - 1 ) * ( r - 1 )
inv = gmpy.invert( e, phi )

print(inv)
print(hex(pow( rsaed, inv, n )))

小插曲,我本来手写的 exgcd 求逆元,结果写错了,最后因为不会 py 而选择了 gmpy

5 MISC

1 打工是不可能打工的

题目关于劳动法和基本法的什么东西就先略过了

大家都知道是怎么回事(

然后,StegSolve 直接 Frame 逐个看就行了

2 zip-0

题目说的是 9 位数字密码

这,不就是爆破

虽然事后发现 7zip 可以直接打开,惊了

据说是非预期的错误,笑了

3 zip-1

题目说了 010Editor

那就没什么说的了

4 樱花

strings

没了

5 隐写

仔细看,Red plane 0 左上角一段白

就选择 Red plane 0 通道,LSB 一下,就知道 Flag 了

6 真正的互联网

访问链接即可

7 zip-2

明文破解

pkcrack -c "lilac.png" -p lilac.png -C ./zip-2.zip -P ./lilac-logo.zip -d qwq.zip

没了

8 Yankee with no brim

binwalk 草出来里面的 png

发现 png 的 CRC 有问题

改个 Height,没了

9 大司马与千层饼

我先建议出题人司马

直接 OD 会有一句 You see the string,but it is not so easy...but it's baby! 来嘲讽你

总之 binwalk 套出里面的 7z,解压出来是个 gif,string 里面的 Flag 是 Fake

gif 逐帧草出来两个残缺二维码,补全,扫一下,结果还是 Fake

赛后有 Hint 告诉我们

「你在第二层,你以为他在第五层,实际上他在第一层」

你妈的,直接对 EXE Resource Hacker 得到一个凯撒密码

解出来是个网址,访问是个残缺二维码

补上定位点,扫就得到 Flag

6 Basic

没啥说的,签到

7 结

总之是一场相当快乐的比赛

几乎除了 Web 所有东西都是现学的,这大概就是在线比赛的乐趣吧,没有所谓记忆造成的堡垒

感谢举办方,给了我学习的机会

最后,跟我一起喊,mcfx 天下第一!

Fcitx5 & Rime 配置小记

输入过程截图
Fcitx5 输入截图

0 Rime 是什么

在很多情况下,如果你直接带着 Linux 输入法 这样的关键字去 Google 搜索

那么你得到的通常都是 Google Pinyin,或者 Sogou Pinyin

Google Pinyin 年久失修,Sogou 的话,维护也不算多上心

如果你再认真一点,你也许可以找到 Sunpinyin 和 Libpinyin

这两个的体验已经相当不错了,但你也会发现,在准确率上,还是差了点,而且在词库大的时候,还会很卡

这个时候,你就会查到 Rime —— 中州韵输入法引擎


聪明的输入法懂我心意

这是 Rime 自己的标语

Rime 具有更强大的定制性,更优秀的词语联想,以及跨平台的支持

如果你不相信 Sogou(相信我,没几个人相信 Sogou 不会上传你的数据),那么 Rime 是目前最优秀的选择

0.1 环境 & 我的需求

Arch Linux

小鹤双拼用户

1 Rime 的安装

对于 Arch Linux,我们首先需要选择一个输入平台,我选择的是 Fcitx5

关于 Fcitx5,你可以查阅 Fcitx5 – ArchWiki

(虽然这个东西在 Waylnd 下的功能还很残缺,但是,Wayland 本身问题也不少)

关于 Rime,Arch Wiki 有 这个页面

这个页面简单的介绍了 Rime 的安装方式与使用方式,不过并没有关于 Fcitx5 的介绍

所以我来简单的记录一下

1.1 Fcitx5 的安装

pacman -S fcitx5 fcitx5-qt fcitx5-gtk
pacman -S fcitx5-chinese-addons fcitx-rime

此时,Fcitx5 的配置文件在 ~/.config/fcitx5

1.2 Rime 的安装

pacman -S librime 
pacman -S rime-double-pinyin #需要双拼的话,安装这个

此时,Rime 的配置文件在 ~/.local/share/fcitx5/rime

1.3 Fcitx5 的配置

你可以选择使用 kcm-fcitx5 来通过 GUI 进行配置

不过本篇文章,我选择自己动手

注意:Fcitx5 在关闭的时候,会覆盖配置文件,所以请确保 Fcitx5 关闭后,再修改配置文件

$ cat ~/.config/fcitx5/profile 
[Groups/0]
# Group Name
Name=Default
# Layout
Default Layout=us
# Default Input Method
DefaultIM=rime

[Groups/0/Items/0]
# Name
Name=keyboard-us
# Layout
Layout=

[Groups/0/Items/1]
# Name
Name=rime
# Layout
Layout=

[GroupOrder]
0=Default

这份配置文件给 Fcitx5 设置了两个输入法,一个是 US 键盘,一个是 Rime

然后,和其他输入平台一样,我们需要配置环境变量

cat ~/.xprofile
export GTK_IM_MODULE=fcitx5
export XMODIFIERS=@im=fcitx5
export QT_IM_MODULE=fcitx5

这个是使用 Xorg 时才有效的

关于使用 Wayland 时的环境变量设置,请查阅 Environment variables (简体中文) – Arch Wiki

然后将 Fcitx5 加入自启动后,重启即可

2 Rime 的配置

2.0 安利时间

Github 上有许多优秀的 rime 的配置文件

通常情况下,你只需要将整个项目 clone 到本地,便可以直接使用

这里推荐 wongdean/rime-settings

以及,这也是一个不错 Rime 配置 https://sh.alynx.one/posts/My-RIME/

下面,就是我的折腾环节

2.1 极光拼音

明月拼音不是不香

就是每次在打词库里没有的词组的时候,经常会出现一堆繁体好几页,我还找不到自己想要的

这个问题显然是简体繁体之间转换除了什么奇怪的问题,不过,这个问题显然不好解决

既然解决不了,不如搞一个基于简体的输入方案

显然,不止我一个这么想

hosxy/rime-aurora-pinyin 就是这样一种输入方案,码表全部为简体中文,并且几乎只有 「通用规范汉字表」 中的汉字

然后你兴冲冲的下载了,开始用了,发现有一个问题

这个输入方案,没有词组……

2.2 寻找词库

通常情况下, Sogou 词库 里能找到我们需要的词库

但是这次不一样,这个输入方案里一点词库都没有

所以即使从 Sogou 词库里鼓捣几个下来,输入体验也不是很好

这个时候,我们需要一份中文常用词汇表

我找到了这个 indiejoseph/现代汉语常用词表.txt

简单处理一下(Vim 都可以处理),就可以用做 Rime 的词库了

再来试试,不错

2.3 Sogou 词库的导入

这个倒是有比较优秀的方案了 studyzy/imewlconverter

虽然 AUR 里有这个包,但是我并没有成功安装,反正 Releases 里也有 bin,直接用吧

3 结

本篇文章使用 Fcitx5 + Rime 在 Terminator + Vim 的环境下写的

在写这篇文章时,体验还是很好的,九成词语都在第一或者第二候选,不在的词语虽然需要自己去选,但并不复杂

本文所有配置文件都可以在 woshiluo/woshiluo-config 里找到

这次在写文章的时候主要参考是各个项目的 Readme 和 Wiki,以及 Arch Wiki,就不一一列出来了

这篇文章只是基于自己的配置经历所写,如果在任何地方有错误,希望你能通过评论指出

最后,安利 hosxy/fcitx5-material-color 主题,上面的截图就是这个主题,非常好看

将 Bilibili 缓存转换成视频

0 环境 & 提示

  • 电脑
    • PHP
    • Bash
  • 手机
    • Bilibili 国内版 5.54.0

这样子转换出来还是有水印的,请不要在未经 UP 主同意的情况下传播或用在非法行为

1 过程

因为要备份手机,就想着能不能把 Bilbili 的缓存转换成普通视频留在电脑上

然后看了一下下载目录,里面有一个 video.m4saudio.m4s

mpv 一打开,发现刚好一个是视频一个是音频…

剩下的事情就是拿 ffmpeg 合并一下的事情…

随便胡个脚本就行了

2 脚本

covert.sh
# Author: Woshiluo<[email protected]>
#!/bin/bash

work_dir=`pwd`;
fa_php=`pwd`"/fa.php";
part_php=`pwd`"/part.php";

echo $part_php;
mkdir -p "$work_dir/output"

function covert() {
	cp "$fa_php" ./
	cp "$part_php" ./
	fa=`php fa.php`
	part=`php part.php`
	echo "[INFO] Coverting $fa $part..."
	rm fa.php part.php
	mkdir -p "$work_dir/output/$fa"
	for file in `ls`; do
		if [ -d $file ]; then 
			cd $file
			ffmpeg -i video.m4s -i audio.m4s -c copy "$work_dir/output/$fa/$part.mkv" -y >/dev/null 2>&1
			cd ..
		fi
	done
	echo "[INFO] Done!"
}

for file in `ls`; do
	if [ -d $file ] && [ $file != "output" ]; then
		cd ./$file
		for video in `ls`; do
			if [ -d $video ]; then
				cd ./$video
				covert
				cd ..
			fi
		done
		cd ..
	fi
done
fa.php
<?php

$_file = file_get_contents( "./entry.json" );

$desc = json_decode( $_file );

echo $desc -> title;
part.php
<?php

$_file = file_get_contents( "./entry.json" );

$desc = json_decode( $_file );

echo $desc -> page_data -> part;

随便胡的脚本

把这三个文件放到 Bilibili 的下载目录下,然后执行 covert.sh 就行了

执行过后转换过的文件会在 output 目录下

2019 年的小小总结

0 序

马上就要从 9102 年到 202 年了呢(不是)

今年是多彩的一年

一年内数不清的变化,造就现在的我

而我会带着这一年的变化,向着前方行走

「凡为过往,皆为序章。」

1 飞速的变化

一切事物都在以想象不到的速度变化着

政策的快速变化,事件的戏剧化反转,一次又一次的拷问我们

还有什么是可信的

还有什么是稳定的

或许我们看不到事情的真相,但是应当尽我们所能,确保所了解情况的真实

做一个不受自媒体和短视频带节奏的人

2 巧妙的缘分

或许是运气很好,有幸在学习的路上优秀的学长们和老师们

甚至还有在中山集训,雅礼集训各个比赛上见到的同学们

能够遇到大家确实是一个了不起的缘分,要加油啊

缘分还体现在自己对于动漫的热爱

无论实在 1 月的动漫星城,还是 8 月的 Aqours 5th Live 上映会与 Bilibili World 2019 广州站,乃至 12 月在北京 Animate 和搜秀城

虽然自己身处全世界离海最远的城市,但是还是有机会,有缘分能够到达这些地方,见到相同爱好的人

缘,妙不可言

3 向前的脚步

或许多多少少有一点算得上梦想的东西

今年有幸参加了几乎整个赛季一直到 NOI 的所有赛事

( CCF NOI WC,APIO,CTS,NOI,CSP)

甚至有幸去 PKUWC 这种神仙比赛

不过比赛成绩倒是都不怎么样,还是要努力啊

4 看不清却值得期待的未来

自主招生政策的不定

进在眼前的中考

这一切都表明了,未来是看不清的

但是我依然相信缘分,相信自己的脚步

看不清的未来,才是值得期待的

5 尾声

https://blog.woshiluo.com/919.html#

从自己在动漫星城时放光的双眼,到搜秀城时的砍价

从 WC 时的铜牌,到 NOI 时的打铁

从混乱的 SYZOJ 魔改,到逐渐形成自己的规范的小脚本

从慌乱不定的 E 类,到波澜不惊的 NOIP 暂停

我是想要发光的,想要在舞台上,发出属于自己的光芒

正是前方迷茫不定,才有着向前走,发光的意义

「私たち、 輝きたい!」

「我们,想要闪闪发光」

「LoveLive! SunShine!!」

+1 附录 – 游记总表

https://blog.woshiluo.com/1077.html

没有写游记的事件

  • 6 – 7 月 雅礼集训
  • 7 月 NOI
  • 8 月 中山纪念中学集训
  • 8 月 Aqours 5th Live 上映会

其他游记/感想不在此处总结

PKUWC 2020(2019) 游记

0 序

晚上十一点半的机房,Woshiluo 正悠闲地考虑着第二天该做的题目

说着他一瞬想起来自己似乎报名过 PKUWC

「过去几年都没有人通过的,今年夏令营整个新疆都没过,果然还是白忙活吧」

话虽这么说,Woshiluo 还是打开了报名网站

「喵喵喵,过了?」

1 Day -2 出发

在经过严密的安检过后

我终于到达了乌鲁木齐站三层

比较有意思是,我的检票口貌似是 A1

然而 A1 前面的人都已经坐满了

我走到夹层,和绝大多数高铁站一样,这个地方是用来骗钱的

不过也就意味着,这里的人会少一点

稍作调整之后,车站广播也响起来了

随着缓慢的人群,我通过了检票口,到达了火车上

2 Day -1 火车上的短暂时光

乌鲁木齐铁路局所销售物品的昂贵已经是有很久历史的事情了

所以如果上车的时候犯懒没有买足吃的东西的话

可以到大站下去购买以尽可能的减少损失

这趟列车绝大部分地区都是没有信号的地方

所以基于手机的娱乐基本上是没有了

Kindel 和随身携带的纸制书可能是最有效的消磨时间方式

所以我在火车上过了一遍绿书,并读完了「樱花庄的宠物女孩」的本篇及番外

我的上铺和下铺都是年轻人,一个考研,一个去内地学习技术

总而言之,大家也都有自己的前途

3 Day 0 慌忙的首都一天

在早上十点,火车到达了北京西站

我从地铁口出来,联系上了 sbr,我从北京西站到国家图书馆再换乘到海淀黄庄

两个人见面稍微寒暄了一小阵,就到星巴克里谈人生

到了快要报道的时间,我们从海淀黄庄坐到北京大学东门 D 出口,从 D 口出来后约 5min 就可以到达报道的地方

我前面比没有几个人,进去之后签到的一栏旁边还有一个 是否使用 NOI Linux

看到这一栏时,就体会到了 PKU 的良心,更不要提后面还有 PKU 食堂 150 CNY 的饭卡

和 sbr 打车到国贸大厦,惊奇的发下自己把一些东西落在了报到处…

算了不重要

然后在和 sbr 吃完午饭后,我坐地铁从国贸到东大桥

经过 5min 的第六感导航,我顺利的到达了 Animate

这里的 Animate 和广东店装修风格好像啊

不过比广东店大了不少

时间超级紧迫,因为很明显,我需要在报道时间结束前回到报道处,拿回自己的东西

所以我就一目十行,随便扫了点 LoveLive! 和 碧蓝航线 的东西就飞速离开了

不过最意外的收获就是搞到了一本 「LoveLive! School idol diary」还是日文原版的

然后一路 Rush 到北京大学的报道处,偷偷的拿到了自己的东西

接着到了自己的酒店,真的离 PKU 好远啊…

稍微整理了一下在 Animate 的战果后跑去和 杨老师 — 我们的教练 会面

然后发现自己这边里所有地铁站都好远啊…

选了个最近的地铁站 — 上地站,然后惊奇的发现 13 号线几乎全是在地表的,我一开始以为这是轻轨,后来发现这东西叫城铁

从上地站出发,换乘两次到鼓楼,然后杨老师告诉我她到雍和宫了

于是从鼓楼出发,换乘一次到雍和宫

后面和老师吃了顿饭,然后和地铁关闭时间赛跑,换乘两次回到上地站

待我再回到酒店的时候,我人已经完全坏掉了

4 Day 1 稍有秩序的开幕

早上在酒店滴滴了 10min +,终与打到了车…

匆匆忙忙,到达开幕式所在场所

认识了几位大佬

开幕式大约介绍了一下北大,然后就散了

然后发现,没有地方休息的说

在经历了一阵混乱后,最后反正是在中关新园定了一间房

嘛,虽然贵的要死,不过明天也算是有地方休息了

反正今天是没有时间了

和教练一起在食堂吃了顿饭

在吃完 PKU 食堂的饭后,真的让人想上 PKU (不是

食堂饭又便宜又好吃,感谢 PKU 给的饭卡

然后跑到考场,Windows 考生使用 Windows 10,具体配置也不清楚

NOI Linux 考生使用的是 Dell 的笔记本,Intel i7,16G DDR4

多余的也没看,毕竟体验很优秀

T1

  • 离谱玩意儿,Subtask 1 随便搞搞就出来了
  • Subtask 2 推了好长时间…没有出来

T2

  • 全肝 T1 和 T3 了
  • 这道题目 Subtask 很多,认真写的花应该有至少 20pts

T3

  • Subtask 1 不用带脑子
  • Subtask 2 离线查分即可,没来的及写
  • 后面的 Subtask 不是我这种人该碰的

告辞 28pts 跑路

在 T1 莽的太久了, T2 T3 好多暴力没拿

中关新园离 pku 是真的近(

回去没有什么事情,就一直在颓废

5 Day 2 PKU 旅游日

面试

据说面试还有紧张到说不出话的

基本上面试文的问题都挺普通的

面试的时候会有一个预定的时间表

我想着我还没到时间,就去食堂买了个面包当早餐

结果回来发现已经到下一个了

无限尴尬

不过还好,面试老师并没有说什么

和一个天津大佬面基成功w

测试

T1

  • 跟着 Subtask 一步步走,基本上都能过
  • 说白了就是人口普查题
  • 我随便在考场上胡了个 $O(n\log^2(n))$ 的,反正过了

T2

  • 神仙,Subtask 1 跑路

T3

  • 最小割?
  • 有一说一,我上次敲网络流应该还是在中山
  • 弃了

最后 100 + 32 + 0 = 132pts

还算可以,基本上算是我的最大能力了(

晚上

回到酒店后,想起今天是冬至,便外卖了份饺子

然而是真的贵

吃完虽然没有吃饱,不过就这样子吧

然后颓废

6 Day 3

早早的就起来了

和 lk 爷爷面基,一起在楼下的包子铺吃了招行

两个人扯皮了好久

Orz lk 太强了

后来两个人打车去 PKU,中间 LK 在 THU 下了

我到了之后刚好开幕

我们教练家女儿生病了,于是我又双是一个人了

闭幕式

一开始大概就是领导讲话

然后就开始讲题

讲下来感觉自己还是很有希望 200 + 的

不过 Day 1 的时候智商下线了w

题倒是都还好,除了 Day 1 T3 完全没搞懂

剩下的都是能听懂但是不会写的(

然后颁奖

我觉得和我没什么关系,就把衣服拉链来开了,毕竟很热

然后惊奇的发现有个三等奖,结果上去的时候拉链没拉上www

晚上

后面发现闭幕式结束才 15 点

直接冲出去坐地铁到搜秀城w

然后再采购

然后就是回宾馆睡觉

晚上和 sbr 再面基

6 Day +1

上午和 Galaxy 见面

(或许是我这次唯一一个面基的成年人?)

然后带我逛了下 THU,顺便在 THU 吃了顿饭

和他聊了一阵子天,受益匪浅

正准备去机场

然后飞机延误了

7 Day +2

意外之喜

于是再去了趟 Animate,好好逛了一把

发现了好多之前没有发现的东西

大收获的说

8 Day +3

飞机又双延误了

告辞,火车真香

CSP 2019 游记

0 序

今年感觉相比较以往还是难了一些的

不过没有大家说的那么夸张倒是真的

不过自己貌似真的变菜了

0.1 吐槽

笔者考完 CSP 就会初中部回了一天

然后周二病到周五

一直在不发烧和低烧徘徊

但是一直咳嗽

咳得人 头疼 + 胸口疼 + 嗓子疼

新疆地邪啊

1 Day 0

今年七十中并不给试机子(注:也有可能是 CCF/科协 不让)

罢了,也没什么看头,每年 11 月都会在七十中冻一下

中午大家一起吃饭

虽然想学习,最后还是放弃了

晚上翻来覆去睡不着,迷迷糊糊最后还是睡了

2 Day 1

2.0 序 – 清晨

早上一开门,哇,下雪了

无论这个比赛怎么改名下雪还是避免不了的

在寒冷的凌晨,我们又拿起武器,向着熟悉的战场再次走去

2.1 CSP – S2 Day 1

T3 是个啥啊?

一中学长们的校车因为各种各样的原因,8:25 才到

遇见了不少以前的熟人,SpinMry,dyf 大家好久不见了,一起加油吧!

匆匆忙忙赶进考场,熟练的敲下 .vimrc,慌的一批

到了时间,准点发题

一直很想问都 9102 年,新疆为什么还是不用压缩包加密这种可靠性高的多的方法

非要用电子教师软件传输,然后再匆匆忙忙断网

罢了,有人愿意举办就不错了

  • T1
    • 属实不带脑子的题目,上来一看基本上就知道从上往下模拟即可 $O(64)$
      不过确实有一种更为简单的办法,参见 Oi-wiki – 格雷码
      最后看数据范围注意到 unsigned long long,出题人太毒瘤了吧
  • T2
    • 随便一看就是瞎搞累计贡献,道理我都懂,这代码怎么写?
      考场上一顿胡写,树上瞎跳,然后写点优化
      写完一开样例3,114514 太臭了,一跑,爆栈了,手写递归去了
      这么一套下来,感觉要出事 $\text{flag}_1$
  • T3
    • 一看,神仙题,10pts 告辞
      等一下这个 10pts 为什么这么难调,时间到了,完蛋

2.2 午休

考完心态小崩,找 dyf 一起快乐

两个人一起吃了饭,然后开始互相吐槽各自的学校

聊完天,两个人有一起走到七十中,路上还在吐槽某大佬的的迷路属性,结果到了七十中校门口就碰到了某大佬

2.3 CSP – J2

先在二楼和 dyf 与 caq 一起聊天 CSP 本质面基大会无疑

然后快考试了才去了三楼,运气可以抽到了比较暖和的位置

  • T1
    • 哇这么水的题目真的有出的必要吗…
  • T2
    • 一开始没看懂在搞什么,还想着 CSP – J2 都考平衡树了?
      后来一看 $price_i \leq 1000$ ,那没事了,多队列维护开溜
  • T3
    • 一眼背包,倒是不知道怎么搞
      弃了
  • T4
    • 最短路题目,怎么搞随缘

一出考场发现 2 道原题过分了啊

T3 我竟然做过,傻了

3 Day 2

3.1 CSP – S2 Day 2

又见熟人,不过因为 Day1 的心态,所以就没有过多闲聊

遇到郭老师,问他 Day 1 爆栈的问题

满口都是什么

「机子环境不重要的啊」
「全国只有两个省份提供了 NOI Linux,还都是虚拟机,别的都是 Windows 」

我看加个「七十中断电和七十中无关」都可以郭老师三连了

顺带一提,Day2 T2 内存 1GB 我们考试环境总共就 1GB 内存,可把我给整乐了

算了,XJ 这个占全国 $\frac{1}{6}$ 领土的小省份还是不要想别的了吧

  • T1
    • 什么玩意儿,神仙,跳
  • T2
    • $O(n^3)$ 是很显然了,就 $f_{i,j}$ 为以 $i$ 结束,向前 $j$ 位的最优答案就行了
      然后对 $i$ 考虑优化,考虑 $i$ 相等的情况下有两种状态 $j,k$,若 $j < k$ 且 $f_{i,j} < f_{i,k}$ 那么 $k$ 状态显然可以舍去
      不就是个弱化版斜率优化吗
  • T3
    • $O(n^2)$ 的点不用带脑子,敲就完事了
      链的点是不带脑子,可是我又双没时间了

3.2 下午

随便在一中食堂买了桶泡面

然后就会机房和大家一起聊天

高二的学长们很大一部分都要退役了,说不好真的是最后一次见了…

祝各位安好

After

一点 CSP 过后的小记

Day +2

选手程序出了

找了几个数据在 NOI Linux 上测试了一下

顺带一提,是远程测试,是真的延迟高…

最后基本上都是

$100 + 55 + 0 + 0 + 64 + 40 = 259$

也不知道官方数据怎么样…

Day +5

斗胆看了下 Day1 T2

发现自己把

st[ st_cnt ] 

写成了

st_cnt

离谱

Day +14

正在去市一中的路上,突然看到有个群里说成绩出了

CCF 又写 Bug了(当然不排除故意的可能性)

一路狂奔跑到机房

拿到数据正准备测试,结果机房 DNS 锅了

看了一下发现 php-fpm 服务挂了

修复了之后开始评测,然后在大屏上直播

感觉还可以,评测期间基本上就是在骂测了 1min + 但是却 0 pts 的憨憨

Day +16

想了想,还是有想停课冲冬令营的想法

稍作思考也许就会出结果了吧…

回去文化课实际上感觉还可以,基本上也都听得懂

勉强在班里还算可以,不过在这个学校里想要上一中必须得很靠前啊…

一点小小的总结

今年可能比较去年可能会更加迷茫一些

https://blog.woshiluo.com/900.html

去年的问题有一条今年还有的

  • 时间规划有一定问题

除此之外,能察觉到的主观问题还有

  • 思想方向有些许问题
  • 过于追梦,导致检查和部分暴力点未能做到

以下是一些客观原因

  • 提高组和入门组一起考太痛苦了,敲到最后在考场上不想写 值得一提的是,相似问题也在第一轮认证时有出现
  • 某名的感觉体力不太行…考试到最后手一直在冷(也有可能是七十中实在是太冷了)

顺带一提,我和同省大爷 StudyingFather 的意见一样

个人感觉我们今年的培训题目还是太偏了,考试虽然一直都在考,但是留于改题与总结的时间并不算长

不过我们也确实做不到跟上出题趋势这个大方向

希望我们会走的更好吧

「Jump up HIGH!!」

– Aqours

今年已经是我第三年学习 Oi 了

也许自己真的在实现最初的梦想

当时刚学 Oi 的时候,就一直在想,要是我能拿到 XJ 的第二块 Au 就好了

后来目标渐渐变了,变成很多奇奇怪怪的东西

回过头来,却发现自己也无意识中接近了最初的目标

不过还是很遥远就是了

不过人好歹还是要有梦想的,毕竟自己文化课也不算优秀

所以说,就当是有梦想了吧

虽然自己菜的真实

「私たち、 輝きたい!」

「LoveLive!SunShine!!」

Woshiluo
2019/12/04
乌鲁木齐市第一中学 小机房

命令行下使用 VirtualBox 安装 NOI Linux

0 缘起

这两天模拟赛越发频繁了…

Windows 有时候很睿智,Lemon 时间波动特别大,Cena … 不说了大家都懂

总而言之,与其和微软斗智斗勇,不如早日更换评测环境

然而如果使用现今的发行版,有一个很有意思的问题…

CCF 的评测环境有些久远,而且还是 32 位的

所以果然还是 NOI Linux 吧~

然而机房并没有空闲的电脑能够完成这个任务,虚拟机大家又跑不起

我的眼光落到了正在运行着 NovaOJ 的工作站上

就决定是你了!

Continue reading “命令行下使用 VirtualBox 安装 NOI Linux”

BiliBili World 2019 广州游记

1 消费清单

总计 1926 元

我至今都不知道为什么这个数字这么……

注: 未特别标注单位即为 CNY (人民币)

1.1 场外消费

总计 750 元

  • 门票 VIP 450(没有普通票了掀桌)
  • 黄牛智商税 200
  • 来回高铁 50 x 2 = 100

1.2 场内消费

总计 1176 元

基本上是在预算之内了

  • Figma Fate/Go Saber 手办 490
  • BilibIli World 2019 广州 帆布袋 60
  • LoveLive 系列 总计 526
  • – LoveLive! 高坂穗乃果 卡套 50
  • – LoveLive! 南小鸟 挂件 29
  • – LoveLive! SunShine!! CYaRon! T-Shirt L 200
  • – LoveLive! Sunshine!! 善子 挂件 29
  • – LoveLive! SunShine!! 扇子 30
  • – LoveLive! Sunshine!! 文件夹 x 3 110
  • – LoveLive! 官方画册 38
  • – LoveLive! 官方典藏集 70
  • Vsinger 洛天依 乐正绫 贴画 10 x 2 = 20
  • 扭蛋 50 元
  • – 5 枚抽奖币 10 x 5 = 50
  • – LoveLive! Sunshine!! 渡边曜 手办? 40
  • – 1 枚纪念…
  • 转生史莱姆 零钱袋 30
Continue reading “BiliBili World 2019 广州游记”

基于 PHP 的站点存活监测项目 一点笔记

项目链接: https://github.com/woshiluo/server_uptime

1 为什么会有这个项目

NovaOJ 的服务器在乌市一中的内网,笔者身为 Oier,不可避免的有去内地培训的情况出现,无法保证及时得知内网的情况

然而市面上绝大多数服务监控通常都支持公网(至少我是只找到了公网的按钮)

轮子好像是有的,但是我 Python 功底薄弱,迫于要搞 Oi,没有时间学习新语言

那就造新轮子吧!

Continue reading “基于 PHP 的站点存活监测项目 一点笔记”

CCF WC 2019 游记

Day -1

上午起来收拾了一下就前往乌鲁木齐市机场了

在机场里面互相定位是一件困难的事情,我们最终通过奇迹淫巧和瞎挥手聚在了一起

然后是漫长的安检和候机….

在经历各种各样奇怪的娱乐过后,飞机终于落地

飞机上拍的云朵

下去坐地铁,站了一个多小时后有疯狂转圈终于吃上了人生中第一顿麦当劳并到达了宾馆

发现电视有 HDML 口,接之

一顿瞎嗨,用电视看了看鬼畜和老番

Continue reading “CCF WC 2019 游记”