乙巳岁九月十四修博客服务器感怀
乙巳岁九月十四修博客服务器感怀
2025年10月5日修理博客服务器有感
时间线
2025年10月2日
?一夜醒来,服务器崩溃了
不知道咋修
2025年10月3日
忘了
2025年10月4日
开始琢磨怎么修
但又不知道怎么修
尝试过重启服务器、重装主题
不敢动数据库
2025年10月5日
重装数据库(保留数据),无用
我草他妈的,直接删掉数据(导出)
我草他妈的,能进去了
然后在查看导出的数据

???少了一个括号
猎奇
2025年10月5日修理博客服务器有感
?一夜醒来,服务器崩溃了
不知道咋修
忘了
开始琢磨怎么修
但又不知道怎么修
尝试过重启服务器、重装主题
不敢动数据库
重装数据库(保留数据),无用
我草他妈的,直接删掉数据(导出)
我草他妈的,能进去了
然后在查看导出的数据

???少了一个括号
猎奇
DHEnry-FMCRAFT/websocket-chat: 来自AI编写的websocket版的聊天程序
一个基于 WebSocket 的实时聊天室应用,支持多频道聊天、管理员功能和用户管理。
git clone https://github.com/DHEnry-FMCRAFT/websocket-chat
cd websocket-chatpip install websockets请编辑server.py中的ALLOWED_CHANNELS数组,逗号分隔,引号包裹允许的频道,注意允许的频道一定要包含public
请编辑hash.py中的test_string变量,为初始密码,然后使用以下代码运行
python hash.py然后将生成后的hash设置为server.py中的ADMIN_PASSWORD_HASH变量的值,然后保存server.py
python server.py服务器默认监听 0.0.0.0:8765,允许的频道:public、1、2、3
python client.py| 命令 | 功能 | 示例 |
|---|---|---|
::login [用户名] | 设置用户名 | ::login Alice |
::choose [频道ID] | 切换频道 | ::choose 2 |
::list [频道ID] | 查看频道用户 | ::list 1 |
exit / quit | 退出聊天 | exit |
| 命令 | 功能 | 示例 |
|---|---|---|
::lists | 查看全服用户 | ::lists |
::say [频道] [用户] [消息] | 发送私信 | ::say 1 Bob "Hello" |
::kicks [频道] [用户] [理由] | 踢出用户 | ::kicks 1 Bob "违规发言" |
::kick [频道] [理由] | 清退频道 | ::kick 1 "频道维护" |
::closes [频道] [用户] [理由] | 断开用户 | ::closes 1 Bob "多次违规" |
::close [频道] [理由] | 关闭频道 | ::close 1 "封禁频道" |
要使用管理员功能,请使用用户名 administrator 登录,系统会提示输入密码。
server.py 中配置DEBUG 变量切换默认服务器地址,1为使用localhost:8765,用于本地调试server.py,0为需要用户自行输入服务器地址服务器会在控制台输出运行状态和错误信息,客户端会显示连接状态和错误提示。
websocket-chat/
├── server.py # 服务器主程序
├── client.py # 客户端主程序
└── README.md # 项目说明这个项目其实是 $Deepseek \times Doubao$ 一起写出来的(乱用LaTex),也是有很多的BUG,但也是在我的命令下写出来的
这个项目最终会放到 $FMCRAFT$
2025年10月1日 PR V1.0 Release V1.0 · DHEnry-FMCRAFT/websocket-chat V1.0
是这样的
在我们班,疑似身高成为了判断一个人的标准捏
今天,2025年9月30日,学校举行校运动会,可我看到了这样猎奇的现象:
课间休息的时候,我们的体委开启了日常操作:走到一个比较矮的同学面前,把手平放在对方头顶,然后又放到自己脖子,比划着身高差嘛,周围响起一阵笑声,被比划的同学勉强扯出笑容,眼神却有些闪烁,其实这里被比划的人是我,但是感觉我们的体委有点软弱,我当时还是对他进行了教育(bushi,他也说他不会再犯了,当时说的是如果他再犯我把他*了,写的时候已经忘了是啥了,忘了就忘了,最后也和解了
[scode type="yellow"]信息:慈溪市上林初级中学 2028 届 2 班陈成[/scode]
另外一种情况
一个比较高的人给一个比较矮的人摸头,其实这里摸的是我,这个我不是很放在心上,因为印象不高,具体忘了 不会只有男的才知道,摸头杀是侮辱人的吧
剩下的不多说了,说了要被喷的
我的评价是:😂😂😂(表示嘲讽)
这种情况已经不想多说了,美其名曰的开玩笑,但这个玩笑是不是开得有点逆天了
但是我还是忍不住想批判亿小下,所以就诞生出了本文
也许是我过于敏感,才会注意这种猎奇事情
此文章包含大量的侮辱性词汇,也是blog第一篇多次进行侮辱的文章,也运用了大量的夸张的修辞手法,会用*标注,仅个人观点
我认为,这种摸头杀是不正确的,摸头这种行为,应该只会被用于家长为表达对孩子的喜爱,摸头表达喜爱,或师生之间。但上面案例的情景,是一种居高临下的状态吧?说直白点,只有当一个人觉得自己比对方“高一级”的时候,才会自然地做出这种动作
在全班同学面前被比划身高,就类似于被当众测体重,个人想想,不尴尬吗?
那个瞬间吧,几乎是所有的人,所有的目光都望向那个被比划身高的人类,被比划的人只能尴尬的笑,毫无他法,说一种偏向于校园霸凌的语言:你是开不起玩笑吗???小不点
通过我个人的仔细观察,我发现了班里只有高个子对矮个子进行“摸头杀”操作,从来没有反过来的现象,再说,矮个子也摸不到高个子啊,我个人认为,这是一种权力的象征,说人话,我在身高上压倒了你,我就比你牛逼,我就可以用摸头杀来对待你
这是权威吗?在霸凌者眼前确实
这是游戏吗?如果是被双方认可的,我认为这算是游戏,但既然被称作摸头杀,那么我认为这不属于游戏
*而是赤裸裸的霸凌(bushi
*有些人本身就因为身高问题,而导致内向,所以就会很讨厌物理接触(bushi
$$ \text{男孩身高} = \frac{\text{父亲身高} + \text{母亲身高} + 13}{2} $$
$$ \text{女孩身高} = \frac{\text{父亲身高} + \text{母亲身高} - 13}{2} $$
看不懂分数的可以回炉重造了
根据上述内容,可以知道的是,身高跟父母身高有一定的关联,还有跟出生地区有一定的关联,例如东北于姐、山东大妈,有天生的优势,哦对,如果你爸是浙江人,你妈是东北人,那么你不一定能长得很高(我的情况)
说人话,有些东西天生就是被固定的,定义的,身高取决于基因,就像double和float,有本质上的数据存储限制,关于double和float精度丢失的问题 - 壹鲦热带鱼的小窝,这是先天性的,因为身高上嘲笑他人,就约等于嘲笑他人出生一样,根本没有道理
虽然上面说是说,但只是理论,现实上,你完全可以一天吃10千克的粮食,总有一天可以长到八米一
但是但是,如果你投胎的家庭很穷,那么基本上可以不用奢望了,只能在学校好好干饭了
好好吃饭,吊打同龄人完全没问题
(当然我是不可能会好好吃饭的)
先质问霸凌者:
$$ \text{身高高,成绩好吗} $$
成绩也好的请跳过
霸凌者自己ask一下自己
而且,有些东西本身就是不能比较的,举一个例子,100平方厘米 ○ 100厘米,我问,这能比吗
某些人,成绩不好,不要拿身高比,天生优势比你大坝,莫非是为了给自己增加自信???那么你可以唱一句歌,叫做:姐就是女王,自信放光芒(bushi
身高嘛,不同人,基因不同,有什么好比的
总结:每个东西都有自己的价值,身高不等于能力,如果你认为身高=能力,那么你可以去打NBA了
关于为什么这个部分要放到这个章节的最后,因为有一种手法,叫做先抑后扬
我见过有同学因为身高自卑,走路都不敢挺直腰板。这种伤害是真实存在的,就像代码里的bug,虽然看不见,但影响很大
(FROM DEEPSEEK)
我认为deepseek的说法有些奇怪, 他说的是姚明吧QWQ,xmsl
这个身高鄙视本身就算侮辱他人,但没有特别直白吧?
建议换位思考,不会的话,可以参考回复消息,怎么才能不当语言终结者? 如何正确回复对方消息【笔记】【备忘录】 - 壹鲦热带鱼的小窝
或者自行询问deepseek
尊重别人的身体边界,不要随便触碰他人
真正的友好不是通过摸头来表现的,而是通过平等的交流和尊重
如果被霸凌者是女生,那么霸凌者死定了(bushi
等到有一天被霸凌者比你taller一个head,那么你死定了
不要跟着起哄,起哄、嘲笑只会让被霸凌者死的很难看
等到有一天被霸凌者比你taller一个head,那么你死定了
建议沉默,或者
$$ \text{向后转,起步走!} $$
你甚至还可以转移话题,帮助被霸凌者解围(最好的选择)
但是是是是是是是,最好的选择,Hello, Teacher! There is height discrimination here, or harshly speaking, school bullying.
不懂的可以回炉重造了

方法1
Hello, Teacher! There is height discrimination here, or harshly speaking, school bullying.

方法2
$$ \text{向后转,起步走!} $$
会编程的人, 普遍身高并不高,就我们学校有一个五年级拿到CSP-J一等的人,初一目前身高一米五五,但是,真的没有人会对他进行身高歧视,因为实力,你懂不懂?开玩笑的:),一个人的价值从来不是用厘米来衡量的,而是能实现什么作用,什么功能?
真正的高大,从来不是物理上的高度,而是人格的高度,面对这种情况做出的反应
希望这篇文章能帮助到你,感谢您的阅读,BG是AI生成的
这个问题,我记得我是在五年级的时候就有了,情况大概如下
现在,你需要将π放进一个变量中,需要保留到小数点后100位
当时,我想着,不是so easy嘛,然后编写出了如下代码
#include <bits/stdc++.h>
using namespace std;
int main(){
float x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
cout<<x;
}然后,我怀着激动的心情,颤抖的手,内心OS:马上就可以AK了!哈哈哈哈!!! ,但是,现实给我了种种一拳
* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe
PS E:\output> & .\'double.exe'
3.14159我:
?
What FUCK???
这感觉不太对啊,这输出怎么能这样子
哦!我忘了,还有double!
然后编写出了如下代码
#include <bits/stdc++.h>
using namespace std;
int main(){
double x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
cout<<x;
}一键运行:
* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe
PS E:\output> & .\'double.exe'
3.14159?
没保存吗
Try again
* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe
PS E:\output> & .\'double.exe'
3.14159What FUCK?
怎么还是这样?
那时候我情绪崩溃了,不知道咋回事
然后,我突然想起来了保留小数点的方法!即setprecision
setprecision的方法完成然后写出了如下代码
#include <bits/stdc++.h>
using namespace std;
int main(){
double x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
cout<<setprecision(100)<<x;
}嘿嘿嘿,兄弟们,终于可以AK了!!!
* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe
PS E:\output> & .\'double.exe'
3.141592653589793115997963468544185161590576171875az
好像确实精确了亿点,但没有完全精确吧?
怀疑人生中。。。
哦!还有printf!!!
printf的方法完成#include <bits/stdc++.h>
using namespace std;
int main(){
double x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
printf("%.100lf",x);
}这下总不能错了,printf可是C语言的,怎么可能错??
可是...
现实又给我了重重一锤
* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe
PS E:\output> & .\'double.exe'
3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000我是不配学编程吗???
为什么显示总是这么打击我
呜呜呜呜呜呜呜呜
呜呜呜呜呜呜
我草,牛逼!
- IEEE 754 浮点数标准
计算机使用固定的位数来存储浮点数:
- float(单精度):32位,约6-7位有效数字
- double(双精度):64位,约15-16位有效数字
- long double:通常80位或128位
- double 的存储结构
double 使用64位存储:
- 1位符号位
- 11位指数位
- 52位尾数位
这意味着 double 只能精确表示大约15-16位十进制数字。
以上内容来自Deepseek-R1
EMM,似懂非懂,但是大概了解了
浮点数在计算机中以二进制分数形式存储,无法精确表示所有十进制小数。
以上内容来自Deepseek-R1
《二进制分数》
我嘞个二进制分数
依旧是补码,对吧???
二进制存储原理
double 的52位尾数只能表示有限精度的分数:
3.141592653588888... = 无法用有限二进制精确表示计算机找到最接近的可表示二进制分数,这就是你看到的"奇怪"数字。
以上内容来自Deepseek-R1
我的评价:六百六十六
- 浮点数都是近似值
- 不要用 == 直接比较浮点数
- 需要高精度时使用特殊库或整数运算
以上内容来自Deepseek-R1
我的评价:近似值???
#include <bits/stdc++.h>
using namespace std;
int main(){
unsigned long long x=31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
cout<<double(x/99);
}于是,我就发现了
* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe
e:\double.cpp:5:26: warning: integer constant is too large for its type
5 | unsigned long long x=31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PS E:\output> & .\'double.exe'
1.07941e+17哦对对对对对对对,范围啊,我草
奇怪了,为什么我们不使用高精度数组呢?
#include <bits/stdc++.h>
using namespace std;
int main(){
string x="31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
cout<<x;
}运行!
PS E:\output> & .\'double.exe'
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679耶!成功!
致谢
浮点数就是用来表示小数(实数)的数据类型。让我用通俗易懂的方式解释:
浮点数 = 科学计数法的二进制版本
就像我们写很大的数会用科学计数法:
计算机用类似的方法表示小数,但是使用二进制。
浮点数由三部分组成(以32位float为例):
[符号位] [指数部分] [小数部分]
1位 8位 23位举例: 数字 -13.625 在计算机中如何表示?
转换为二进制:
科学计数法:1101.101 = 1.101101 × 2³
"浮点"的意思是小数点的位置可以浮动:
// 这些数都是浮点数,小数点位置不同
float a = 123.45; // 小数点在第3位后
float b = 1.2345; // 小数点在第1位后
float c = 12345.0; // 小数点在第5位后#include <stdio.h>
int main() {
// 问题1:有些十进制小数无法精确表示为二进制小数
float f = 0.1f; // 0.1在十进制中很简单,但在二进制中是无限循环的!
printf("0.1 的实际存储值: %.20f\n", f);
// 问题2:连续相加会产生误差
float sum = 0.0f;
for (int i = 0; i < 10; i++) {
sum += 0.1f;
}
printf("0.1相加10次: %.10f\n", sum); // 可能不是精确的1.0
return 0;
}想象一把尺子:
关键点:
#include <stdio.h>
#include <float.h>
int main() {
printf("float 精度: 约%d位有效数字\n", FLT_DIG);
printf("double 精度: 约%d位有效数字\n", DBL_DIG);
printf("float 范围: %e 到 %e\n", FLT_MIN, FLT_MAX);
printf("double 范围: %e 到 %e\n", DBL_MIN, DBL_MAX);
return 0;
}简单总结: 浮点数就是计算机用来表示小数的近似方法,虽然不完美,但足够应对大多数科学计算和工程应用的需求。
| 特性 | float | double |
|---|---|---|
| 大小 | 4字节 (32位) | 8字节 (64位) |
| 精度 | 约6-7位有效数字 | 约15-16位有效数字 |
| 范围 | ±3.4e-38 到 ±3.4e+38 | ±1.7e-308 到 ±1.7e+308 |
| 关键字 | float | double |
#include <stdio.h>
int main() {
float f = 3.141592653589793f; // 注意后面的 f
double d = 3.141592653589793;
// 正确的格式说明符
printf("float: %f\n", f); // 默认显示6位小数
printf("double: %lf\n", d); // %lf 用于 double
// 控制小数位数
printf("float(2位): %.2f\n", f);
printf("double(4位): %.4lf\n", d);
// 科学计数法表示
printf("科学计数法: %e\n", f);
printf("科学计数法: %le\n", d);
return 0;
}#include <stdio.h>
#include <math.h>
int main() {
// 问题1:精度损失
float a = 0.1f;
float b = 0.2f;
float c = a + b;
printf("0.1 + 0.2 = %.10f\n", c); // 可能不是精确的 0.3
// 问题2:比较浮点数不要直接用 ==
if (fabs(c - 0.3f) < 1e-6) { // 使用误差范围比较
printf("c ≈ 0.3\n");
}
// 问题3:大数吃小数
float big = 1e8f;
float small = 1.0f;
printf("大数 + 小数 = %f\n", big + small); // 可能还是 100000000
return 0;
}#include <stdio.h>
#include <math.h>
int main() {
double numbers[] = {3.4, 3.5, 3.6, -2.3, -2.7};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("四舍五入示例:\n");
for (int i = 0; i < size; i++) {
printf("%.1f -> %.0f\n", numbers[i], round(numbers[i]));
}
// 其他相关的舍入函数
double x = 2.7;
printf("\n其他舍入函数:\n");
printf("round(%.1f) = %.0f (四舍五入)\n", x, round(x));
printf("ceil(%.1f) = %.0f (向上取整)\n", x, ceil(x));
printf("floor(%.1f) = %.0f (向下取整)\n", x, floor(x));
printf("trunc(%.1f) = %.0f (向零取整)\n", x, trunc(x));
return 0;
} 我最近才发现,我回复消息,总是当语言终结者,我缺不知道该咋办,老是因为我自己的回复,导致没办法让对方继续回复
然后我想了一下。。。
不要敷衍对方的回复,大胆的说
就比如哦这个字,当对方说兄弟我今天作业没做完,被老师骂了,如果你回复哦,对方可能会觉得
哦~属于第一种
这样就会产生歧义
对方说东西,当你不懂时,不要瞎逼逼,这样会被怼
要学会:
合理运用ai
不懂的东西,情景发给ai,让ai帮你看看这是啥玩意儿,然后用自己的话转述,不要复制,这会显得很敷衍
已读不回给对方的感觉可能是你在忙,或者是你懒得理自己,特别是在企业微信上,这点要格外注意
不知道怎么回复消息,可以问问ai
提问时,截图请截完整,不要截你自己以为的信息,还有,描述要描述清楚,不知道怎么提问可以问问ai
可以用一些侧面的词汇来讽刺对方,你要自己衡量一下这合适吗?
首先,生气是分很多种,最常见的一种:对方骂你,对方骂你,没关系,不回复他
或者是对方在装逼,没关系,直接说哦哦,这个东西我没用过这种回答
例如对方说今天作业真他妈多啊,然后如果你回复我差不多,对方就会感觉你不重视他,你可以适当转换话题,例如我们今天作业也好多,你那边有啥作业???
手表咋办?
假设有以下记录
A:我觉得C真是个傻逼
B:我觉得并不是
C:你他妈傻逼吧
如果B比较敏感,B可能会认为C在骂B
但实际上C在骂A
一定要记得先看内容
如果懒得看
丢给ai
或者
找中间的人私信问问干了啥,注意要私信,不要在群里问,如果聊的东西是骂战,那么你可能会被怼
害人害己,这点道理应该都懂
因为“我认为”这种词可能会对对方产生误导,如果被发现了,那么留给你的只有被怼的份
正确的方法是问ai或者实践
自己不熟悉的东西,问ai之后,你要自己酝酿一下是否合理,可以实践,避免对对方产生误导,那么留给你的只有被怼的份
设一下聊天记录
A:我草兄弟们,下单了一款114514元的服务器
错误的回答
B:这有啥了不起的,劳资也买得起
正确的回答:
C:emm,有钱,记得好好利用,不然就废了
一种让对方更感觉自豪的东西:
D:六百六十六,114514元都花得起,为什么不vivo50?(有贬)
对方装逼,你很烦,多次劝导无果,可以屏蔽
虽然多用,会有更多的交流对象
但少用显得很正经啊,而且易懂
回复通用公式:
基本回复+疑问,如果你的话有疑问,可以勾引对方兴趣
不懂的,随时问ai
| 情况/场景 | 面对公式(三步法) | 举例子(让对方有话接) |
|---|---|---|
| 情况1:对方分享好事/开心事 | 真诚赞美 + 询问细节 + 表达感受 | 对方:“我这次数学考试进步了10名!”你:“太厉害了吧!(赞美)你是怎么做到的?快传授下经验!(询问细节)我也要努力了,真为你高兴!(表达感受)” |
| 情况2:对方倾诉烦恼/糟心事 | 承认情绪 + 表达支持 + 启发思考 | 对方:“唉,和我爸妈吵架了,好烦。”你:“听起来确实挺烦的,换我我也难受。(承认情绪)没事,我在这儿呢。(表达支持)是因为什么事情呀?看看我能帮上什么忙不。(启发思考)” |
| 情况3:对方提到一个你不懂的话题 | 坦诚未知 + 表达好奇 + 平滑迁移 | 对方:“我最近超迷量子物理!”你:“哇,这个领域我好陌生,感觉超酷的!(坦诚未知+表达好奇)你是看了什么有趣的科普吗?还是电影?给我推荐个入门款呗!(平滑迁移到‘推荐’这个共同动作上)” |
| 情况4:日常话题(如吃饭、天气) | 细节延伸 + 关联彼此 + 展望计划 | 对方:“我刚吃完午饭。”你:“我也刚吃完!(细节延伸)吃的啥好吃的?让我馋一下!我中午的番茄炒蛋可绝了。(关联彼此)下午打算做点什么呀?(展望计划)” |
| 情况5:聊天突然冷场/不知说啥 | 回顾之前 + 观察当下 + 聊聊未来 | (冷场中...)你:“对了,你上次说的那个游戏/动漫/书,后来怎么样了?(回顾之前)”“或者:你那边天气如何?我这儿下雨了,适合睡觉。(观察当下)”“又或者:周末快到了,有什么安排吗?(聊聊未来)” |
Download FFmpeg
选择windows下载
给他放到C盘根目录下,记得解压
按下Windows+i打开系统设置,依次:系统->关于->高级系统设置->环境变量
双击用户和系统的PATH变量,增加ffmpeg文件目录的条目,然后一路确定,重启电脑
idm最新破解机IDM\_6.4x\_Crack\_v20.4\_idm-6.4x-crack-v20.1-CSDN博客
请参考这一篇博文
等候IDM出现【下载此视频】,点击下载,然后不要急着点确定/下载,复制这个链接,应该是m3u8格式,下载下来,看看里面的内容是不是视频格式,例如.ts
ffmpeg -i {m3u8_url} -c copy {video_name}先给电脑下载ffmpeg并配置环境变量
安装idm(可选)
到电影网站,idm会显示可以下载视频,点他,然后复制链接(不要下载),或者自己找到电影的m3u8
然后在命令行运行ffmpeg命令:
ffmpeg -i {m3u8_url} -c copy {video_name} V1.0 - 2025年9月17日
这个文章包含了对hydro的讽刺,但是仅仅是个人观点,仅供参考
贴两张于HUSTOJ用户群的群精华截图:

证据找不到了
但是我清清楚楚的记得
有一个人问有没有php的oj,hydro维护者说用狗屎hustoj
| 功能 | Hydro | HustOJ | SYZOJ1 | QDUOJ | Vijos |
|---|---|---|---|---|---|
| 安装 | 一键脚本 | 一键脚本 | 手动搭建 | docker | docker |
| 数据库 | MongoDB | MySQL | MariaDB | Postgres | MongoDB |
| 测试数据存储 | 本地/S32 | 本地 | 本地 | 本地 | 数据库 |
| 多评测机 | + | =3 | =4 | = | + |
| 测试数据同步 | 按需抓取 | 全量同步 | 全量同步 | 全量同步 | 按需抓取 |
| 比赛 | ACM/OI/IOI/乐多 | ACM/OI | ACM/OI/IOI | ACM/OI/IOI | ACM/OI |
| 封榜 | + | + | - | - | - |
| 作业功能 | + | + | - | - | + |
| 修改编译命令/添加语言 | + | =5 | - | - | + |
| 权限系统6 | + | = | - | - | + |
| 训练计划(题单) | + | + | -7 | - | + |
| 团队 | +8 | - | - | - | + |
| Hack | + | - | - | - | - |
| SpecialJudge | +9 | + | + | - | = |
| Subtask | + | - | + | - | - |
| 交互题 | + | - | + | - | - |
| RemoteJudge | CF/SPOJ/UOJ/POJ/Luogu | HDU/PKU | - | - | - |
| 题目导入 | fps/syzoj/qduoj/hydro | fps/qduoj | syzoj | fps/qduoj | - |
| 3. 安装配置繁琐,且需要手动在服务器间同步数据。↩ | |||||
| 4. 需要手动在服务器间同步数据。↩ | |||||
| 5. 仅能修改部分编译参数,添加语言需要修改源代码。↩ | |||||
| 6. 此处的权限系统指 除用户/管理员二元化权限之外的 的更细粒度的权限划分。↩ | |||||
| 7. 部分二次开发版本有此功能。↩ | |||||
| 8. 通过域功能,允许用户创建域并在域内拥有管理员权限。域之间仅共享账号数据,也可使用域内小组进行权限控制。↩ | |||||
| 9. 支持所有主流 SPJ 格式。↩ |
来源于介绍 https://hydro.js.org/
这里将hydro开发者将hustoj和hydro放在一起,也许是为了对比,剩下的就不说了
这玩意儿我是真他妈想不通
收费50人民币 逆天
说话≈狗叫,所以要交狗叫费,逆天Hydro
咋改logo
看文档怎么导入hustoj的题目
看文档去导入不了hustoj的题目
你他妈看文档会死是吗
我的评价:回复一下会死吗
而且回复消息慢的一批
如果你在有hustoj的系统上装hydro
hydro会问你要不要导入hustoj的题目
当你选择是
安装完
你会发现根本没导入
(逆天)
他妈自己写一个格式就nb了是不?fps超过50MB就导入不了?真有你的 (乐)
这玩意儿我是真他妈想不通
新版就不行了???
逆天
具体见洛谷开发文档
我在Hydro群发了一个图片
就被T了
乐
好难猜啊~
未若HUSTOJ
感谢https://www.akoj.top/提供了一些相关资料
wget http://dl.hustoj.com/install.sh
bash install.sh 本网站与各大浏览器长期合作,可以按 Ctrl+F搜索关键词
遇事不慌,先重启服务器试试
因为作者太懒了,有些改动你可能需要重启服务器才能生效
这个文档有点玄学了
如果文档里面有看不懂的词汇,可以在官方文档继续查找或者在本文章内继续查找
请学会使用deepseek
本文章提供的所有指令都需要在root用户的身份下运行
建议安装phpmyadmin,具体方法百度一下
oj不能装在phpmyadmin
find /home/judge -name "FILE_NAME"在 FILE_NAME处查找你需要的文件名
情况1:web+判题建议装在服务器
情况2:web装虚拟主机 判题装服务器或者远程判题
先安装好宝塔+lnmp环境+docker
左侧创建数据库,数据库名和用户名必须是jol,密码随意,然后记住这些信息
在终端运行
wget http://dl.hustoj.com/install-ubuntu22.04-bt.sh
bash install-ubuntu22.04-bt.sh(仅限于Ubuntu22.04)
然后键入数据库名和密码
回车
期间可能会多次出现需要你手动按下回车的情况
我记得需要按3次
安装完后,宝塔网站创建php站点,域名可以先填ip+端口,网站目录是 /home/judge/src/web
创建完后,编辑站点,左侧网站目录,关闭防跨站攻击
然后左侧应用商店,搜索php,设置,禁用函数里去掉 putenv的禁用,然后扩展里安装 yaml的扩展
宝塔防火墙里放行端口,idc服务商放行端口
/include/db_info.inc.php
sudo pkill -9 judged && sudo judgeddb_info.inc.php和 judge.conf两个文件,然后重启判题机judge.conf中如果 OJ_USE_DOCKER=1,则 OJ_SHM_RUN=0run0、run1等文件夹是真实的目录,并非软链OJ_USE_DOCKER=0可以判题,OJ_USE_DOCKER=1时无法判题,请检查 install目录下 Dockerfile是否符合要求(可以问问Deepseek),然后再次运行 docker.sh看看结果是否正常OJ_USER_DOCKER参数,需要重启judged生效docker.sh适用于解决卡死的判题任务,新手的话建议先进oj,然后后台管理,左边系统管理-重判任务,人工判题编译中改判其他结果
或者给自己添加HTTP_JUDGER权限,重新登录oj,然后在判题列表中鼠标放到卡死的判题结果上面,下面改成其他结果,记得输入分数
PHP安装yaml扩展
从理论上讲,就是你机器配置太拉了,建议升级配置
治标不治本的方法:
重启php和mysql(具体方法deepseek)
也许治本的方法:
宝塔应用商店找到php,设置,配置修改,按照以下的设置进行设置
short_open_tag开启短标签支持
max_execution_time300最大脚本运行时间
max_input_time60最大输入时间
memory_limit 128M脚本内存限制
post_max_size50MPOST数据最大尺寸
file_uploads开启是否允许上传文件
upload_max_filesize50M允许上传文件的最大尺寸
max_fil_uploads20允许同时上传文件的最大数量
fault_socket_timeout60Socket超时时间
error_reportingE_ALL & ~E_NOT错误级别
display_errors开启是否输出详细错误信息
cgi.fix_pathinfo是否开启pathinfo
date.timezonePRC时区sudo su
cd /home/judge/src/install
echo "insert into jol.privilege values('admin','administrator','true','N');" | ./mysql.sh或者(不推荐 但是理论上可以)
sudo su
cd /home/judge/src/install
./mysql.sh可以执行 install目录下的 fixing.sh
或者重新运行安装脚本(理论可以,但不推荐)
/template/syzoj/footer.php
创建一道id为1000的题目
1 检查自己浏览器
2 更新hustoj的版本
3 请确保使用的是 <span class='md auto_select'></span>而不是 [md][/md] 文本编辑器
/template/syzoj/header.php
AC或 Accpted这种咋办修改 /lang/cn.php,查找关键字修改
批量的话,建议直接操作sql
先 mysql -p登录sql服务器,密码就填 db_info.inc.php里头的密码
USE jol;
UPDATE problem
SET source = CONCAT(source, ' 标签')
WHERE problem_id BETWEEN 起始编号 AND 结束编号;注意标签前面要加一个空格
数据库中删除
在template的header加两个 <br>
先将logo放在服务器上,然后编辑template的 header.php,在OJ_NAME前面插入图片,注意调整比例
题面exam P110 - 文本题测试 - TropicalFish-OnlineJudge
怎么添加文本题题目?先创建题目,然后最底部改成文本评测
注意题目描述要这么写
<span class='md auto_select'>
题目内容,支持markdown
</span>例如本题的题目描述是这么写的:
<span class='md auto_select'>
## 你好!
## 这是本OJ的第一道文本题!
## 你可以在题面中点击一个选项,以选择选项!
## 祝你愉快!
1. 以下属于面向对象的高级语言是()。
- C++
- 汇编语言
- C
- Basic
<br>
</span>另外,如果想要多选,请在当前题号的前面加上多选字样
关于测试数据这么写:
data.in:一行,有N道题,在本题,data.in是 1,注意,题号只能是数字,要有序
data.out:N行,每行是这样构成的:题号 [分数] 正确答案,例如,在本题,data.out是 1 [100] A,不要有多余内容,一行一个
template.c:N行,每行一个题号加一个空格,例如,在本题 template.c是 1 ,注意一题的右边要有一个空格,然后再换行
template.cc:N行,每行一个题号加一个空格,例如,在本题 template.cc是 1 ,注意一题的右边要有一个空格,然后再换行
可以看看洛谷
LaTeX 格式手册 | 洛谷帮助中心
洛谷 Markdown 格式手册 | 洛谷帮助中心
肥肠好用
或者使用在线LaTeX公式编辑器-编辑器
找到题目,编辑测试数据,依次设置下面两个

访问 OJ_URL/export_ac_code.php,前提是你登录了
oj默认是ioi模式,设置单个比赛oi,可以在添加比赛的禁止方勾选比赛进行中,结束后才能查看结果。
可以丢给deepseek,这样写:
你好,请为我写一个随机测试数据生成器,生成xx组测试数据,题目是这样的:
标准程序是这样的:
额外的数据点要求:
请输出python的生成代码下载 watt toolkit
最新版oj有自动备份,在 /var/backups下
适用于所有方法:
压缩 /home/judge,导出数据库
新服务器先安装hustoj,确保能正常判题,解压judge文件夹覆盖,然后导入数据库(不需要删除)
重置数据库密码
安装好后oj会给exam,仿照即可
install目录下的 uninstall.sh
加ios加速头,可以看安装好oj的faq
OJ_SIM_ENABLE=1修改/home/judge/src/web/include/db\_info.inc.php,设置
$OJ_SIM=true;长期使用查重功能,需要占用较多磁盘空间和CPU时钟,可以考虑用下面的命令考虑定期清理:
cd /home/judge/datafind -name ‘ac’ -exec rm -rf {} \\;1、先用谷歌浏览器直接打开xml文件,看是否有语法错误,如果有,用文本编辑器修订提示的行号。
2、如果超过100M,可以先用EasyFPSViewer拆分成多个小文件,然后再导入。
3、对于HUSTOJ,可以先压缩为zip再上传导入
4、修改/etc/php/7.2/fpm/php.ini, 提高post\_max\_size、upload\_max\_filesize 、memory\_limit、max\_execution\_time 的值。修改后执行sudo service php7.2-fpm restart生效。
假设有机房a,有学生考试,如果机房a的学生a给机房b的学生b比赛页面,那么机房b的学生b就可以访问比赛,从而帮助他提交代码
但是,设置子网后,机房b的学生就无法进去,包括其他网段
建议别管他,换个账号登录
执行mysql.sh试试
编辑 /home/judge/etc/judge.conf,OJ_INTERNAL_MARK1改0
然后重启判题机
subtask是啥可以看看洛谷
怎么绑定?
官方:命名规则: .in/.out 对应,[]标记分数,.标记subtask , 如 TaskA.a[20].in/out 和 TaskA.b[20].in/out 是一组subtask,共计40分。
说人话:{备注名}.subtask名[subtask分].测试数据编号.in/out
例如
这里,problem是题目备注名,a是subtask名,100是subtask分数,1-6是测试点编号,.in/.out是后缀名
材料:
一台能用的电脑
找一个不要钱的U盘
安装hustoj的服务器
先去http://123.158.39.181:8090/下载镜像,然后下载rufus,用rufus写入镜像到不要钱的u盘
然后把u盘插入要安装hustoj服务器,百度搜索主板+启动键选择u盘启动,安装即可
宝塔面板里面站点配置文件,设置伪静态
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-82.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}将82设置为实际的PHP版本号,中间不要有其他符号
sudo systemctl restart nginx
sudo systemctl restart php-fpm
sudo systemctl restart mysql
sudo pkill -9 judged
sudo judged 我们这一次并没有批分数,所以关于上海市2025CSP-J十连测Round 7的内容我们会分为$Part 1$和$Part 2$
这一次我估计很难
共15题、每题2分,共计30分,每题有且仅有一个正确选项。
判断题1分,选择题3分,共计40分;判断题正确填T,错误填F。
int solve1(int n) {
n++;
int size = 0;
int digit[16];
int pow = 1;
int s = 0;
while (n > 0) {
digit[size] = n % 10;
size++;
n /= 10;
s += pow;
pow *= 5;
}
while (size > 0) {
--size;
pow /= 5;
s += (digit[size] / 2) * pow;
if (digit[size] % 2 == 0) break;
}
return s - 1;
}
int solve2(int n) {
int s = 0;
for (int i = 1; i <= n; i += 2) {
int t = i;
bool pass = true;
while (t > 0) {
int x = t % 10;
if (x % 2 == 0) {
pass = false;
break;
}
t /= 10;
}
if (pass) s++;
}
return s;
}保证solve1与solve2的参数n是非负整数。
int a[maxn];
int b[maxn];
int n, m;
const long long mod = 1000000007;
bool filled[maxn][maxn];
long long mem[maxn][maxn];
long long solve(int i, int j) {
if (filled[i][j]) return mem[i][j];
if (i == n) return 1;
if (j == m) return 1;
filled[i][j] = true;
if (a[i] == b[j]) {
long long sum = solve(i + 1, j) + solve(i, j + 1);
return mem[i][j] = sum % mod;
} else {
return mem[i][j] = (solve(i + 1, j) - solve(i + 1, j + 1)) % mod;
}
}
int main() {
std::cin >> n >> m;
for (int i = 0; i < n; ++i) std::cin >> a[i];
for (int i = 0; i < m; ++i) std::cin >> b[i];
std::cout << (solve(0, 0) + mod) % mod << "\n";
}long long k;
int n;
int p[20];
bool used[20] = {false};
long long frac[20];
void gen(int i) {
if (i > n) {
for (int i = 1; i <= n; ++i) std::cout << p[i] << " ";
return;
}
for (int a = 1; a <= n; ++a) if (!used[a]) {
if (k <= frac[n - i]) {
p[i] = a;
used[a] = true;
gen(i + 1);
return;
} else {
k -= frac[n - i];
}
}
}
int main() {
n = 1;
std::cin >> k;
frac[0] = frac[1] = 1;
while (k > frac[n]) {
k -= frac[n];
frac[n + 1] = frac[n] * (n + 1);
n++;
}
gen(1);
}单选题,每小题3分,共计30分。
有一个用户,在连续的n天里,都会收到积分,也会消费积分。积分在获得后的m天内有效(m为一个给定的整数),过期失效。在第i天,用户将会获得$p_i$分,他需要消费$c_i$分。若积分不足,则用掉全部积分后用其他方式消费。消费积分时,先用最早的。当天获取的积分可以当天消费。请计算这个用户一共消费了多少积分。
const int max_size = 100000;
int queue[max_size];
int head = 0;
int tail = 0;
int main() {
int n, m;
std::cin >> n >> m;
int sum = 0;
for (int i = 0; i < n; ++i) {
int p, c;
std::cin >> p >> c;
queue[_(1)_] = p;
while (_(2)_) {
if (_(3)_) {
queue[head] -= c;
sum += c;
c = 0;
} else {
int amount = _(4)_;
c -= amount;
sum += amount;
}
}
if (_(5)_ > m) {
head++;
}
std::cout << sum << "\n";
}
}给定一个1到n的排列$p_1, p_2, ..., p_n$。请统计排列中所有长度大于等于2的连续子序列的次大数之和。定义$max_2(a_i, a_{i+1}, ..., a_j)$表示从$a_i$开始到$a_j$结束的连续子序列中,排名第二大的数,这个数就是一个连续子序列的次大数之和。题目就是要求:$\sum_{1 \leq i < j \leq n} max_2(a_i, a_{i+1}, ..., a_j)$。solve用于解决这个问题。
int q[maxn];
int prev[maxn];
int next[maxn];
long long solve(int n, int p[]) {
for (int i = 1; i <= n; ++i) {
_(1)_;
}
p[0] = q[0] = prev[0] = 0;
p[n + 1] = q[n + 1] = next[n + 1] = n + 1;
for (int i = 1; i <= n; ++i) {
int num = _(2)_;
int prev_num = p[i - 1];
int next_num = p[i + 1];
prev[num] = _(3)_;
next[num] = _(4)_;
}
long long sum = 0;
for (int num = 1; num <= n; ++num) {
int prev_num = prev[num];
int prev_prev_num = prev[prev_num];
int next_num = next[num];
int next_next_num = next[next_num];
sum += (long long)num * (q[num] - q[prev_num]) * _(5)_;
sum += (long long)num * (q[next_num] - q[num]) * _(6)_;
_(7)_ = prev_num;
_(8)_ = next_num;
}
return sum;
}