- 问答
【FAQ】问答&讨论贴
- @ 2025-6-7 13:41:09
最近的事情更无语了,某鱼上现在有三个人在卖数据了。周赛数据永久停止更新。
不允许学生创建新讨论了,后面大家可以在这里讨论相关内容。会定期清理。
删了一些同学们自己举办的比赛的帖子。
我建议你们可以私聊参赛。讨论区太乱了,有些提问我看不到了已经。
更重要的是,还是先好好学算法吧各位同学,当你拿了提高组 分,再考虑自己举办一些简单的比赛。
语法场的初心还是为了学生们巩固基础语法,高水平选手可以选择参加入门语法场和入门提高场 目前也没看见能打的 (参考新春马拉松赛成绩)
感觉不过瘾还可以打atcoder和codeforces
415 条评论
-
周净知 LV 8 (4440/4440) @ 2026-5-26 20:24:316天后将有大事发生
-
@ 2026-5-23 18:02:34




-
@ 2026-5-23 17:55:58




-
@ 2026-5-23 17:52:23


-
@ 2026-5-23 16:42:56
关于A0062的答案: #include<bits/stdc++.h> using namespace std; int a;double b,c; int main() {
cin>>a; b=a/1.2; c=a/3.0+27.0+23.0; if(c>b) cout<<"Walk"; else if(b>c) cout<<"Bike"; else cout<<"All"; return 0; } -
@ 2026-5-23 9:45:19🪟 Retro Mini OS v3.1 — 用户手册
Retro Mini OS v3.1 是一个运行在浏览器中的复古风格虚拟操作系统,模拟了经典桌面操作系统的界面与交互体验。内置文件管理、文本编辑器、游戏、浏览器、计算器、画图等常用应用。
目录
1. 启动与桌面
启动过程
打开页面后,会出现经典的 BIOS 启动自检动画:
BIOS CHECKING... OK MOUNTING VIRTUAL DRIVE (C:)... OK LOADING OS V3.1...约 1 秒后进入桌面。
桌面布局
- 桌面图标:双击图标打开对应应用
- 任务栏:底部固定栏,包含「Start」按钮和实时时钟
- CRT 扫描线特效:全局复古 CRT 显示器滤镜
桌面图标一览
图标 应用名称 功能说明 📁 My Files 文件管理器,浏览/打开/删除文件 📒 Notepad 纯文本编辑器,保存/加载 .txt 文件 📝 WritePad Pro Markdown 编辑器,支持实时预览 🕹️ Arcade 游戏中心,包含 8 款内置小游戏 🌐 Internet 内置浏览器,支持网页浏览 🎨 Wallpaper 桌面壁纸颜色更换 🧮 Calculator 科学计算器 🖌️ Paint 画图工具 📖 Game Intro 游戏详细介绍
2. 窗口操作
所有应用窗口均支持以下操作:
操作 方式 说明 拖动 鼠标按住标题栏拖拽 自由移动窗口位置 调整大小 拖动窗口右下角手柄 最小 100×80 像素 前置 点击窗口任意位置 窗口自动置顶 关闭 点击标题栏右侧 X按钮关闭窗口 窗口采用经典 Win95 风格的外观:
- 蓝色活动标题栏 / 灰色非活动标题栏
- 凸起/凹陷边框效果
- 层叠阴影
3. 应用列表
3.1 My Files(文件管理器)
功能:浏览和管理虚拟磁盘 (C:) 中的所有文件。
操作 说明 双击打开 点击文件名,自动用对应编辑器打开 删除文件 点击文件名右侧的 DEL按钮自动识别 .md文件用 WritePad 打开,其余用 Notepad 打开提示:所有文件存储在浏览器 localStorage 中,清除浏览器数据会导致文件丢失。
3.2 Notepad(记事本)
功能:创建和编辑纯文本文件。
功能 说明 新建文件 打开空白编辑器,默认文件名为 untitled.txt💾 SAVE 将内容保存到虚拟磁盘(必须使用 .txt扩展名)📂 LOAD 从虚拟磁盘中选择并加载已有文件 文件名输入框 输入/修改文件名
3.3 WritePad Pro(Markdown 编辑器)
功能:Markdown 文档编辑器,支持实时预览。
支持语法:
语法 效果 # 标题~###### 标题多级标题 **粗体**粗体 `行内代码`行内代码 - 列表项/* 列表项无序列表 > 引用引用块 ---分隔线 ` 列1 [文字](链接)超链接 功能 说明 💾 SAVE 保存为 .md文件📂 LOAD 加载已有 .md文件PREVIEW 右侧面板实时预览渲染效果 自动预览 编辑时自动更新预览
3.4 Arcade(游戏中心)
功能:内置 8 款经典小游戏,点击游戏卡片即可开始。
所有游戏均使用键盘操作,详见第 5 节「内置小游戏详解」。
游戏 类型 难度 🐍 Snake 贪吃蛇 ⭐ 🏓 Pong 乒乓球 👻 Pac-Lite 吃豆人 ⭐⭐ 🧱 Tetris 俄罗斯方块 👾 Invaders 太空侵略者 🧱 Breakout 打砖块 🚜 Tank 坦克大战 ⭐⭐⭐ 🏎️ Racer 赛车躲避 游戏中按
MENU按钮可返回游戏选择界面。
3.5 Internet(浏览器)
功能:基于 iframe 的内置网页浏览器。
功能 说明 地址栏输入 输入网址后按 Enter 或点击 GO 自动补全协议 自动添加 https://前缀搜索功能 输入关键词自动跳转 Google 搜索 ◀ 后退 返回上一页 ▶ 前进 前进到下一页 ⟳ 刷新 刷新当前页面 🏠 主页 跳转到 Google 首页 状态栏 显示加载状态 注意:部分网站可能因为 iframe 安全策略(X-Frame-Options)无法加载。
3.6 Wallpaper(壁纸设置)
功能:更换桌面背景颜色。
- 提供 16 种预设颜色选择
- 点击颜色方块即时预览
- 设置会自动保存到 localStorage,下次访问自动恢复
可选颜色:
#008080#000080#800000#808000#008000#800080#000000#808080#c0c0c0#ff0000#00ff00#0000ff#ffff00#ff00ff#00ffff#ffffff
3.7 Calculator(计算器)
功能:四则运算计算器。
按钮 功能 说明 0-9 数字输入 标准数字键盘 + - × ÷ 运算符 加减乘除 . 小数点 支持小数运算 = 等号 计算结果 C 清空 归零 ⌫ 退格 删除最后一位输入 支持连续运算,出错时显示
Error。
3.8 Paint(画图)
功能:简易画图工具。
工具 说明 Brush(画笔) 自由绘制线条 Line(直线) 点击拖拽绘制直线 Rect(矩形) 点击拖拽绘制矩形边框 Circle(圆形) 点击拖拽绘制圆形边框 颜色选择器 选择画笔/形状颜色 Clear 清空画布 Save 导出为 PNG 图片下载 画布尺寸:600×400 像素。
3.9 Game Intro(游戏介绍)
功能:查看 Arcade 中所有 8 款游戏的详细介绍。
每个游戏卡片包含:
- 游戏名称和图标
- 玩法描述
- 操作键位说明
方便新玩家在开始游戏前了解规则。
4. 虚拟文件系统(VFS)
系统使用 localStorage 模拟虚拟磁盘 (C:),提供持久化存储。
数据结构
{ "welcome.txt": "Welcome to Retro OS v3.1!\n...", "demo.md": "# Markdown Demo\n\n...", "自定义文件名.txt": "文件内容..." }预置文件
文件名 内容 welcome.txt欢迎信息 demo.mdMarkdown 语法演示文档 文件操作
操作 API 保存 sys.fs.save(name, content)读取 sys.fs.read(name)删除 sys.fs.del(name)列表 sys.fs.list()
5. 内置小游戏详解
🐍 Snake(贪吃蛇)
- 目标:控制蛇吃掉红色食物,蛇身会不断增长
- 规则:不能撞墙或撞到自己
- 操作:↑↓←→ 方向键
- 得分:每吃一个食物 +10 分
🏓 Pong(乒乓球)
- 目标:控制绿色球拍,将球击回上方
- 规则:AI 对手在上方,球落到底线则重置,继续得分
- 操作:← → 方向键
- 得分:每次成功回球 +10 分
👻 Pac-Lite(吃豆人)
- 目标:吃掉迷宫中所有白色豆子,躲避红色鬼魂
- 规则:碰到鬼魂则游戏结束,吃完所有豆子通关
- 操作:↑↓←→ 方向键
- 得分:每吃一个豆子 +5 分
🧱 Tetris(俄罗斯方块)
- 目标:填满整行即可消除
- 规则:方块从顶部下落,堆积到顶部则游戏结束
- 操作:← → 移动,↑ 旋转,↓ 加速下落
- 得分:每消除一行 +100 分
👾 Space Invaders(太空侵略者)
- 目标:消灭所有外星人
- 规则:外星人左右移动并逐渐下降,触底则游戏结束
- 操作:← → 移动,空格键 射击
- 得分:每消灭一个外星人 +50 分
🧱 Breakout(打砖块)
- 目标:用弹球击碎所有彩色砖块
- 规则:球落到挡板下方则游戏结束
- 操作:← → 方向键
- 得分:每击碎一个砖块 +10 分
🚜 Tank(坦克大战)
- 目标:控制绿色坦克消灭红色敌人
- 规则:敌人从上方向下移动并增多,碰到敌人则游戏结束
- 操作:↑↓←→ 移动,空格键 射击
- 得分:每消灭一个敌人 +100 分
🏎️ Racer(赛车躲避)
- 目标:躲避前方不断出现的红色障碍车辆
- 规则:碰到障碍车则游戏结束,坚持越久分数越高
- 操作:← → 方向键
- 得分:每安全通过一辆障碍车 +1 分
6. 技术架构
核心技术栈
技术 用途 HTML5 页面结构 CSS3 复古 Win95 风格样式 JavaScript (ES6) 全部交互逻辑 Canvas API 游戏渲染 localStorage 虚拟文件系统持久化 iframe 内置浏览器实现 代码结构
sys (系统核心) ├── fs (虚拟文件系统) ├── boot() (启动动画) ├── win() (窗口创建) ├── close() (窗口关闭) ├── front() (窗口置顶) ├── drag() (窗口拖动) ├── resize() (窗口缩放) └── alert() (系统弹窗) app (应用程序) ├── files() (文件管理器) ├── notepad() (记事本) ├── writepad() (Markdown 编辑器) ├── arcade() (游戏中心) ├── browser() (浏览器) ├── wallpaper() (壁纸设置) ├── calculator() (计算器) ├── paint() (画图工具) └── gameIntro() (游戏介绍) game (游戏引擎) ├── load() (加载游戏) ├── stop() (停止游戏) ├── exit() (退出游戏) ├── keyD()/keyU() (键盘事件) ├── score() (计分) └── over() (游戏结束) G_* (游戏逻辑 - 8款独立游戏) ├── G_Snake (贪吃蛇) ├── G_Pong (乒乓球) ├── G_Pac (吃豆人) ├── G_Tetris (俄罗斯方块) ├── G_Space (太空侵略者) ├── G_Break (打砖块) ├── G_Tank (坦克大战) └── G_Race (赛车躲避)数据存储
存储项 Key 内容 文件系统 retroOS_v3_fsJSON 格式的文件名-内容映射 壁纸设置 retroOS_wallpaper当前桌面背景色值
📖 Retro Mini OS v3.1 — 致敬经典桌面时代的浏览器端虚拟操作系统。
-
@ 2026-5-22 23:28:45🎮 坦克大战 · Battle City
经典街机游戏复刻 · HTML5 Canvas 单文件实现 · 支持双人合作
📖 游戏简介
《坦克大战》是一款基于经典 FC 街机游戏改编的 HTML5 浏览器游戏。玩家驾驶坦克,消灭敌人、摧毁敌方基地,同时保护己方基地不被摧毁。游戏共 20 关,分为四个阶段,每 5 关迎来一位实力更强的大 BOSS,挑战层层递进。
🗺️ 关卡结构
游戏共 20 关,分 4 个阶段,难度逐步提升:
阶段 关卡 主题 大 BOSS 关 第一阶段 1 – 5 入门训练 ⭐ 第 5 关 第二阶段 6 – 10 要塞攻坚 ⭐⭐ 第 10 关 第三阶段 11 – 15 暗影丛林 ⭐⭐⭐ 第 15 关 最终阶段 16 – 20 最终决战 ⭐⭐⭐⭐ 第 20 关 每个阶段包含丰富的地图主题:河流地带、冰原战场、钢铁长城、暗影森林、迷宫之路……
👾 敌人与 BOSS
普通敌人
- 红色坦克,HP 随关卡递增(后期最高 3 HP)
- AI 优先追踪攻击玩家;无玩家时向我方基地突进
精英 BOSS(紫色)
- 出现于各阶段中期
- HP 4,攻击频率更高,移动更积极
大 BOSS(★ 红橙色闪烁)
- 仅在第 5 / 10 / 15 / 20 关出现
- 体型更大,HP 随关卡递增:8 → 13 → 18 → 23
- 特殊技能:每 1.5 秒向四个方向发射散弹,额外 30% 连射概率
- 追踪范围远超普通敌人(420 像素)
- 击杀奖励:+1500 分 + 免费 1 颗炸弹
🎯 过关条件
- ✅ 胜利:摧毁敌方基地(地图顶部 🏚)
- ❌ 失败:我方基地(地图底部 ⭐)被摧毁,或全部生命耗尽
🎮 操作说明
玩家一(黄色坦克)
按键 操作 W A S D移动 J/空格射击 B使用炸弹(清场) Q激活护盾(需拾取) 玩家二(绿色坦克,双人模式)
按键 操作 ↑ ↓ ← →移动 Enter/数字键 0射击 M使用炸弹 通用
按键 操作 P暂停 / 继续
💎 道具系统
道具在击杀敌人时随机掉落,走上去自动拾取:
图标 道具 效果 ❤ 共享生命 队伍生命 +1(最高 8) 🛡 护盾 5 秒无敌 ⚡ 强化炮弹 5 秒内子弹可穿透钢铁 💣 炸弹 获得一颗炸弹( B键使用可清场)🚀 加速 5 秒移速大幅提升
🗺️ 地形说明
地形 特性 砖墙(棕色) 可被子弹摧毁 钢铁(灰色) 仅强化炮弹可摧毁 树林(绿色) 遮蔽视线,坦克可穿越 冰面(蓝色) 坦克在此会滑行,难以控制 ⭐ 我方基地 必须保护,被摧毁即失败 🏚 敌方基地 攻击目标,摧毁即过关
📊 分数对照
目标 分数 击杀普通敌人 +100 击杀精英 BOSS +500 击杀大 BOSS +1500(含额外奖励)
🛠️ 技术信息
- 平台:浏览器(无需安装,双击 HTML 即可运行)
- 实现:纯 HTML5 Canvas + JavaScript 单文件
- 分辨率:624 × 624 像素(13 × 13 格,每格 48px)
- 帧率:60 FPS 游戏循环
🚀 快速开始
# 直接用浏览器打开即可 open tank_battle.html或将
tank_battle.html拖入任意现代浏览器窗口。
制作于 2026 年 · 致敬经典
-
@ 2026-5-22 23:24:22班级八卦会 🍵
同学之间匿名分享八卦的轻量论坛。注册后就能发言,所有人都能看到。
功能
- 注册/登录
- 发布八卦(最多 500 字)
- 浏览所有八卦
- 删除自己的帖子(管理员可删任意帖子)
-
@ 2026-5-20 22:31:56飞机大战
一款极简风格的弹幕射击游戏。
游戏玩法
- 移动:方向键 ↑ ↓ ← → 控制飞机
- 射击:空格键 Space 发射子弹
- 暂停:ESC 暂停游戏
- 商店:R 键打开商店
游戏特色
- 极简美术:纯黑背景 + 青色边框 + 几何图形
- 玩家:青色空心三角形
- 敌人:灰色方块 + 红色子弹
- BOSS:4种不同形状的BOSS + 弹幕攻击
- 粒子特效:红色大圆 + 绿色小圆爆炸效果
敌人类型
类型 颜色 血量 特点 BASIC 红色中圆 1 普通敌人 FAST 绿色小小圆 快速移动 TANK 灰色 5 高血量 BOSS类型
名称 形状 颜色 血量 分数 攻击方式 LIGHTHOUSE 圆形 蓝色 150 15000 扇形弹幕 SQUARE 方形 红色 200 20000 快速直线射击 TRIANGLE 三角形 绿色 250 25000 散弹 + 环绕弹 HEXAGON 六边形 紫色 300 30000 螺旋弹幕 + 追踪弹 商店物品
物品 价格 效果 射速 +20% 150金币 加快射击频率 速度 +15% 120金币 加快移动速度 生命 +1 200金币 增加一条命 飞机变大 180金币 飞机体积增大 防御塔 300金币 自动攻击敌人 魔法塔 400金币 强力魔法攻击 护盾 x1 80金币 抵挡一次伤害 得分规则
- 消灭敌人获得得分和金币(金币 = 得分)
- 消灭不同BOSS获得不同分数
- 分数达到500后BOSS随机出现
操作说明
- 打开 index.html 开始游戏
- 消灭敌人收集金币
- 在商店升级属性
- 击败BOSS获胜!
-
@ 2026-5-10 16:43:51
保龄球代码
#include<bits/stdc++.h> using namespace std; struct WA{ int b; int shu; }ac[100005]; int cmp(WA x,WA y) { return x.shu<y.shu; } int n,q; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>ac[i].shu; ac[i].b=i; } cin>>q; sort(ac+1,ac+n+1,cmp); for(int i=1;i<=q;i++) { int x; cin>>x; int l=1,r=n,mid,ans=0; while(l<=r) { mid=(l+r)/2; if(ac[mid].shu>x) { r=mid-1; } else if(ac[mid].shu<x) { l=mid+1; } else{ ans=ac[mid].b; break; } } cout<<ans<<endl; } } -
@ 2026-5-5 17:35:27
A0221ac代码
#include<bits/stdc++.h> using namespace std; int m; int main() { cin>>m; for(int i=1;i<=m/2;i++) { int cnt=0; int j; for(j=i;j<=m/2+1;j++) { cnt+=j; if(cnt>=m) break; } if(cnt==m)cout<<i<<" "<<j<<endl; } return 0; -
@ 2026-5-4 18:09:11
哈哈哈哈哈,我要笑死啦!😂😂😂
-
@ 2026-4-29 21:29:29666
-
@ 2026-4-26 20:00:25代码能量收集器
游戏介绍
欢迎来到「代码能量收集器」——一款融合了放置挂机、战斗挑战、社交互动与AI对战的综合性网页游戏。在这裡,你将扮演一名初出茅庐的程序员,通过收集代码能量、升级科技装备、挑战程序漏洞BOSS,最终成长为代码世界的传奇人物。
核心玩法
能量收集系统
代码能量是整个游戏的核心资源。你可以通过两种方式获取能量:
手动点击:点击中央的能量区域,每次点击都能获得基础能量。随着「内存优化」等级的提升,每次点击获得的能量会持续增长。这是最直接的收集方式,适合想要积极参与的玩家。
自动产出:每秒钟自动产出的能量取决于「CPU算力」的等级。更高级的设备如「GPU加速」「云服务器」「AI助手」和「量子计算」会为你的产出带来乘数级别的提升。当你的自动化系统足够强大时,即使离线也能持续积累能量。
升级系统
游戏提供了六种升级路线,每种都有独特的加成机制:
装备 主要效果 特色 CPU算力 每秒自动产出+1 基础自动化核心 内存优化 每次点击能量翻倍 提升手动效率 GPU加速 产出获得10倍加成 大幅提升总产出 云服务器 离线收益+50% 告别时间限制 AI助手 产出再翻2倍 指数级增长 量子计算 产出再翻3倍 最终极加成 每种升级都有等级上限,需要消耗越来越多的能量才能继续提升。如何在有限的资源下分配升级优先级,是每个玩家都需要思考的战略问题。
战斗系统
除了收集能量,你还可以挑战程序世界中的各种BUG与漏洞。游戏内置了10层BOSS挑战,从最基础的「Bug病毒」到终极的「赛博Boss」,每一层都有独特的血量、攻击力和奖励。
战斗机制:
- 你的HP由「CPU算力」决定
- 你的攻击力由「内存优化」和「GPU加速」决定
- 每回合你可以选择普通攻击或使用技能
三大技能:
- 重击:造成2倍伤害,冷却2回合
- 吸血:造成0.5倍伤害并恢复30%最大HP,冷却3回合
- 必杀技:造成5倍伤害,冷却5回合
击败BOSS不仅能获得大量能量奖励,首通还有额外bonus。挑战高难度BOSS需要合理的属性升级和技能搭配,是策略与操作的结合。
社交系统
「代码能量收集器」不只是一个人的战斗。游戏内置了完整的社交系统,让你可以与其他玩家互动交流。
公屏聊天室:所有玩家共享一个公共聊天频道,可以分享游戏心得、交流攻略、结识志同道合的朋友。
私聊系统:想要一对一深入交流?使用私聊功能可以与任何已注册玩家单独对话。输入对方用户名即可发起私聊,消息实时传递。
AI机器人小明:游戏内置了一个会聊天的AI机器人。输入「小明」就能和他私聊,他会用丰富的回复与你互动,还会根据话题分享游戏攻略、能量技巧和战斗建议。
工具箱
游戏提供了丰富的辅助工具:
每日签到:每天签到可获得100能量,连续签到天数越多,成就感越强。连续签到7天还能解锁专属成就。
兑换码系统:官方会不定期发布兑换码,输入即可领取额外能量。目前可用的兑换码包括:WELCOME100、ENERGY500、CODE2024、VIP2000、GAMER5000。
导出/导入存档:你的所有数据都可以导出为加密字符串,方便备份或换设备时迁移。导入存档功能可以轻松恢复游戏进度。
排行榜:查看所有玩家的累计能量产出排名,看看自己距离顶级玩家还有多远。
成就系统
游戏内置了16个成就,涵盖了产出积累、战斗挑战、社交互动等多个维度:
产出成就链:初学者 → 程序员 → 工程师 → 架构师 → CTO,分别对应累计产出100、1K、10K、100K、1M能量。
战斗成就链:初战告捷(击败第1层) → 战士(击败5层) → 勇者(击败10层) → 全BOSS克星(击败全部BOSS)。
社交成就链:社交达人(发送10条消息) → 社交之星(发送50条消息)。
特殊成就:点击达人、自动大师、满级玩家、连续签到等。
每个成就都有详细的达成条件和背景描述,点击成就徽章可以查看具体进度。
技术特色
「代码能量收集器」采用纯原生Web技术栈开发,无需任何框架依赖。游戏数据全部存储在浏览器本地localStorage中,无需注册即可开始游戏(但注册后可以解锁更多功能)。
界面设计遵循极简主义美学,采用深色科技风格,以黑白灰为主色调,搭配霓虹绿和霓虹青作为点缀。Montserrat字体确保了优秀的可读性,卡片式布局让信息层次分明。
游戏理念
我们相信,一款好的放置游戏应该让玩家在离线时也能感受到成长的喜悦,在在线时能找到互动的乐趣。「代码能量收集器」正是基于这一理念设计——无论你是佛系玩家还是肝帝,是独狼还是社交达人,都能在这里找到属于自己的快乐。
现在就开始你的代码能量之旅吧!
版本:v4.7 最后更新:2026年4月26日
-
@ 2026-4-25 15:45:25我推出XBTI(学生人格测试)
测试链接:fengyubo.net/XBTI
-
@ 2026-4-23 15:07:11误闯天家
#include<bits/stdc++.h> using namespace std; const int M=1e5; int a[M]; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } int m; cin>>m; while(m--){ int l,r; cin>>l>>r; long long sum=0; for(int i=l;i<=r;i++){ sum+=a[i]; } cout<<sum<<"\n"; } } tangjiarong防盗码 -
@ 2026-4-21 21:37:29TooY0ung恭喜
-
@ 2026-4-18 17:56:49
编译参数:
-std=c++14 -O2 -lopengl32 -lgdi32 -lglu32#include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <cmath> using namespace std; class PerlinNoise3D { private: BYTE p[512]; float fade(float t) { return t*t*t*(t*(t*6-15)+10); } float lerp(float t,float a,float b){return a+t*(b-a);} float grad(int hash,float x,float y,float z){ int h=hash&15; float u = h<8 ? x : y; float v = h<4 ? y : (h==12||h==14 ? x : z); return ((h&1)?-u:u)+((h&2)?-v:v); } public: PerlinNoise3D(){ static const int perm[]={151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180}; for(int i=0;i<256;i++)p[i]=perm[i]; for(int i=0;i<256;i++)p[256+i]=p[i]; } float noise(float x, float y, float z) { int X = (int)floor(x) & 255, Y = (int)floor(y) & 255, Z = (int)floor(z) & 255; x -= floor(x); y -= floor(y); z -= floor(z); float u = fade(x), v = fade(y), w = fade(z); int A = p[X] + Y, AA = p[A] + Z, AB = p[A + 1] + Z; int B = p[X + 1] + Y, BA = p[B] + Z, BB = p[B + 1] + Z; float l1 = lerp(u, grad(p[AA], x,y,z), grad(p[BA], x-1,y,z)); float l2 = lerp(u, grad(p[AB], x,y-1,z), grad(p[BB], x-1,y-1,z)); float l3 = lerp(u, grad(p[AA+1], x,y,z-1), grad(p[BA+1], x-1,y,z-1)); float l4 = lerp(u, grad(p[AB+1], x,y-1,z-1), grad(p[BB+1], x-1,y-1,z-1)); return lerp(w, lerp(v, l1, l2), lerp(v, l3, l4)); } float octave(float x,float z){ float h=noise(x*0.1f,z*0.1f,0)*0.5f +noise(x*0.2f,z*0.2f,0)*0.25f +noise(x*0.4f,z*0.4f,0)*0.125f +noise(x*0.8f,z*0.8f,0)*0.0625f; return (h+1)*0.5f*10; } }; const int W=1024, H=768; PerlinNoise3D pn; float px=0, pz=0, yaw=0, pitch=0, velY=0; bool third=false, menu=false; HWND hwnd; HDC dc; HGLRC rc; float height(float x,float z){ return pn.octave(x,z); } void DrawSkybox() { glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); glPushMatrix(); glRotatef(-pitch*180/3.14159f, 1,0,0); glRotatef(-yaw*180/3.14159f, 0,1,0); glBegin(GL_QUADS); glColor3f(0.2f, 0.6f, 1.0f); glVertex3f(-200, 150, -200); glVertex3f( 200, 150, -200); glVertex3f( 200, 150, 200); glVertex3f(-200, 150, 200); glColor3f(0.8f, 0.9f, 1.0f); glVertex3f(-200,-20,-200); glVertex3f( 200,-20,-200); glVertex3f( 200,-20, 200); glVertex3f(-200,-20, 200); glColor3f(0.3f,0.7f,1.0f); glVertex3f(-200,150,-200); glVertex3f(-200,150,200); glColor3f(0.8f,0.9f,1.0f); glVertex3f(-200,-20,200); glVertex3f(-200,-20,-200); glColor3f(0.3f,0.7f,1.0f); glVertex3f( 200,150,-200); glVertex3f( 200,150,200); glColor3f(0.8f,0.9f,1.0f); glVertex3f( 200,-20,200); glVertex3f( 200,-20,-200); glColor3f(0.3f,0.7f,1.0f); glVertex3f(-200,150, 200); glVertex3f( 200,150,200); glColor3f(0.8f,0.9f,1.0f); glVertex3f( 200,-20,200); glVertex3f(-200,-20, 200); glColor3f(0.3f,0.7f,1.0f); glVertex3f(-200,150,-200); glVertex3f( 200,150,-200); glColor3f(0.8f,0.9f,1.0f); glVertex3f( 200,-20,-200); glVertex3f(-200,-20,-200); glEnd(); glPopMatrix(); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); } void CenterMouse() { POINT pt; pt.x = W/2; pt.y = H/2; ClientToScreen(hwnd, &pt); SetCursorPos(pt.x, pt.y); } void LockMouse() { ShowCursor(FALSE); RECT r; GetClientRect(hwnd, &r); ClipCursor(&r); } void UnlockMouse() { ClipCursor(NULL); ShowCursor(TRUE); } void init() { PIXELFORMATDESCRIPTOR pfd = { sizeof(pfd),1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,32,0,0,0,0,0,0,0,0,0,0,0,0,0, 16,0,0,PFD_MAIN_PLANE,0,0,0,0 }; dc=GetDC(hwnd); int pf=ChoosePixelFormat(dc,&pfd); SetPixelFormat(dc,pf,&pfd); rc=wglCreateContext(dc); wglMakeCurrent(dc,rc); glEnable(GL_DEPTH_TEST); glDisable(GL_FOG); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); GLfloat sun_pos[] = {500,1000,500,0}; GLfloat sun_amb[] = {0.8f,0.8f,0.75f,1}; GLfloat sun_dif[] = {1.0f,1.0f,0.9f,1}; glLightfv(GL_LIGHT0,GL_POSITION,sun_pos); glLightfv(GL_LIGHT0,GL_AMBIENT,sun_amb); glLightfv(GL_LIGHT0,GL_DIFFUSE,sun_dif); glEnable(GL_COLOR_MATERIAL); glViewport(0,0,W,H); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90, (float)W/H, 0.1f, 300); glMatrixMode(GL_MODELVIEW); } void draw() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); float h = height(px,pz); float cy = h + 1.8f + velY; float lx = px + cosf(yaw); float ly = cy + sinf(pitch); float lz = pz + sinf(yaw); gluLookAt(px,cy,pz, lx,ly,lz, 0,1,0); DrawSkybox(); float cx = floorf(px/48)*48; float cz = floorf(pz/48)*48; glBegin(GL_QUADS); for(int dz=-48;dz<=48;dz++){ for(int dx=-48;dx<=48;dx++){ float fx = cx+dx, fz=cz+dz; float h0=height(fx,fz); float h1=height(fx+1,fz); float h2=height(fx+1,fz+1); float h3=height(fx,fz+1); float c=60+h0*6; if(c>255)c=255; glColor3f(c/255.0f,(c+30)/255.0f,(c/2+20)/255.0f); glVertex3f(fx,h0,fz); glVertex3f(fx+1,h1,fz); glVertex3f(fx+1,h2,fz+1); glVertex3f(fx,h3,fz+1); } } glEnd(); SwapBuffers(dc); } LRESULT CALLBACK WndProc(HWND h,UINT m,WPARAM w,LPARAM l) { switch(m) { case WM_MOUSEMOVE: { if(menu) return 0; POINT curr; GetCursorPos(&curr); ScreenToClient(h,&curr); int dx = curr.x - W/2; int dy = curr.y - H/2; yaw += dx * 0.003f; pitch -= dy * 0.003f; CenterMouse(); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(h,m,w,l); } int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int s) { WNDCLASS wc={0}; wc.lpfnWndProc=WndProc; wc.hInstance=i; wc.lpszClassName="GLClass"; wc.hCursor=LoadCursor(NULL,IDC_ARROW); RegisterClass(&wc); hwnd=CreateWindowEx(0,"GLClass","何意味",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,W,H,0,0,i,0); ShowWindow(hwnd,s); UpdateWindow(hwnd); init(); LockMouse(); CenterMouse(); MSG msg; while(1) { if(PeekMessage(&msg,0,0,0,PM_REMOVE)) { if(msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { static bool lesc=0,lf5=0; bool esc = GetAsyncKeyState(VK_ESCAPE)&0x8000; bool f5 = GetAsyncKeyState(VK_F5)&0x8000; if(esc&&!lesc){menu=!menu;menu?UnlockMouse():LockMouse();} lesc=esc; if(f5&&!lf5)third=!third; lf5=f5; if(!menu) { float spd=0.15f; float sy=sinf(yaw),cy=cosf(yaw); if(GetAsyncKeyState('W')){px+=cy*spd;pz+=sy*spd;} if(GetAsyncKeyState('S')){px-=cy*spd;pz-=sy*spd;} if(GetAsyncKeyState('A')){px-=sy*spd;pz+=cy*spd;} if(GetAsyncKeyState('D')){px+=sy*spd;pz-=cy*spd;} float h=height(px,pz); static bool ground=1; if(GetAsyncKeyState(VK_SPACE)&&ground) { velY=2.5f; ground=0; } const float gravity=0.25f; velY-=gravity; float y=h+1.8f+velY; if(y<=h+1.8f){velY=0;ground=1;} } draw(); } } wglMakeCurrent(NULL,NULL); wglDeleteContext(rc); ReleaseDC(hwnd,dc); return 0; } -
@ 2026-4-18 15:55:28xuexiao-yubo.haisnap.space
-
@ 2026-4-17 22:20:38诈个尸
-
@ 2026-4-10 22:37:16那我是不是可以求助一下:这个题,虽然我已经死了
我不会启发式合并,所以我写了,线段树合并优化dp,但这个线段树是一个没有历史最值的吉司机,检查了不下20遍了,希望老师或者同学,帮忙康一下这个。
代码不长
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+5; int n,a[maxn],b[maxn]; vector<int>G[maxn]; int root[maxn]; struct Segment_Tree{ int sum,lazy,Min,se,cnt,lc,rc; }t[maxn*20]; int tot; #define ls t[rt].lc #define rs t[rt].rc void pushup(int rt){ t[rt].sum=t[ls].sum+t[rs].sum; if(t[ls].Min==t[rs].Min){ t[rt].Min=t[ls].Min; t[rt].se=min(t[ls].se,t[rs].se); t[rt].cnt=t[ls].cnt+t[rs].cnt; } if(t[ls].Min<t[rs].Min){ t[rt].Min=t[ls].Min; t[rt].se=min(t[ls].se,t[rs].Min); t[rt].cnt=t[ls].cnt; } if(t[ls].Min>t[rs].Min){ t[rt].Min=t[rs].Min; t[rt].se=min(t[ls].Min,t[rs].se); t[rt].cnt=t[rs].cnt; } } void pushlazy(int rt,int tag){ if(t[rt].Min>=tag)return; t[rt].sum+=(tag-t[rt].Min)*t[rt].cnt; t[rt].Min=tag; t[rt].lazy=tag; } void pushdown(int rt,int l,int r,int mid){ if(!ls){ t[rt].lc=++tot; t[tot]={0,-1,0,(int)(1e18),mid-l+1,0,0}; } if(!rs){ t[rt].rc=++tot; t[tot]={0,-1,0,(int)(1e18),r-(mid+1)+1,0,0}; } if(t[rt].lazy!=-1){ pushlazy(ls,t[rt].lazy); pushlazy(rs,t[rt].lazy); t[rt].lazy=-1; } } void update(int L,int R,int c,int l,int r,int &rt){ if(!rt)rt=++tot; if(t[rt].Min>=c)return; if(L<=l&&r<=R&&t[rt].se>c){ pushlazy(rt,c); return; } int mid=l+r>>1; pushdown(rt,l,r,mid); if(L<=mid)update(L,R,c,l,mid,ls); if(mid+1<=R)update(L,R,c,mid+1,r,rs); pushup(rt); } int query(int L,int l,int r,int rt){ if(!rt)return 0; if(l==r)return t[rt].sum; int mid=l+r>>1; pushdown(rt,l,r,mid); if(L<=mid)return query(L,l,mid,ls); else return query(L,mid+1,r,rs); } int merge(int rti,int rtj,int l,int r){ if(!rti||!rtj)return rti+rtj; if(l==r){ t[rti].sum+=t[rtj].sum; t[rti].Min=min(t[rti].Min,t[rtj].Min); t[rti].lazy=max(t[rtj].lazy,t[rti].lazy); return rti; } // cout<<l<<' '<<r<<'\n'; int mid=l+r>>1; pushdown(rti,l,r,mid); pushdown(rtj,l,r,mid); t[rti].lc=merge(t[rti].lc,t[rtj].lc,l,mid); t[rti].rc=merge(t[rti].rc,t[rtj].rc,mid+1,r); pushup(rti); return rti; } void getans(int u,int F){ int now1=0; for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(v==F)continue; getans(v,u); now1+=query(a[u],1,n,root[v]); root[u]=merge(root[u],root[v],1,n); } update(1,a[u],now1+1,1,n,root[u]); // cout<<u<<'\n'; // for(int i=1;i<=n;i++)cout<<query(i,1,n,root[u])<<' '; // cout<<'\n'; } signed main(){ // freopen("boss1.in","r",stdin); //freopen(".out","w",stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; b[i]=a[i]; } sort(b+1,b+n+1); int cntb=unique(b+1,b+n+1)-b-1; for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+cntb+1,a[i])-b; for(int i=2;i<=n;i++){ int u; cin>>u; G[u].push_back(i); G[i].push_back(u); } getans(1,0); cout<<query(1,1,n,root[1]); return 0; } -
@ 2026-4-8 21:07:46imaqepckjfa-yubo.app.haisnap.com
我又双叒叕更新了《校长模拟器》
打开即玩
可能有bug
给窝反馈
-
@ 2026-4-4 18:37:47
wswsws
-
@ 2026-4-3 20:35:02
我都快累死
-
@ 2026-3-28 20:00:52ok, 浮水1分钟, 我要继续cos溺水的鱼了
-
@ 2026-3-28 20:00:22浮水了
-
@ 2026-3-28 11:21:34
1000递交祭
-
@ 2026-3-27 20:38:08
你们好!
-
@ 2026-3-22 14:35:21
-
@ 2026-3-22 10:06:53证明我还活着
-
@ 2026-3-21 19:34:24
ty
-
@ 2026-3-15 9:54:36怎么这么长时间没人发讨论呀
-
@ 2026-3-14 19:00:43
老师是否可以发硬币???
还有我们的

-
@ 2026-3-11 16:45:39P1868100WA求调
#include<bits/stdc++.h> #define ll long long using namespace std; int n,x,y,dp[3000010]; int l; vector<int>p[3000010]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;++i){ cin>>x>>y; l=max(l,y); p[y].push_back(x); } dp[0]=0; for(int i=1;i<=l;++i){ dp[i]=dp[i-1]; for(int j=0;j<p[i].size();++j){ dp[i]=max(dp[i],(p[i][j]-1>0?dp[p[i][j]-1]:0)+i-p[i][j]+1); } } cout<<dp[l]<<'\n'; return 0; }被HACK了...
-
@ 2026-3-7 20:48:32P5318WA求调
#include<bits/stdc++.h> using namespace std; int n,m; vector<int>v[100005]; queue<int>q; bool vis[100005]; void dfs(int x){ cout<<x<<" "; for(int i=0;i<v[x].size();i++){ if(!vis[v[x][i]]){ vis[v[x][i]]=1; dfs(v[x][i]); } } } void bfs(){ while(!q.empty()){ int x=q.front(); q.pop(); cout<<x<<" "; for(int i=0;i<v[x].size();i++){ if(!vis[v[x][i]]){ vis[v[x][i]]=1; q.push(v[x][i]); } } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i=1;i<=m;i++){ int x,y;cin>>x>>y; v[x].push_back(y); } vis[1]=1; dfs(1); memset(vis,0,sizeof(vis)); cout<<"\n"; q.push(1); vis[1]=1; bfs(); } -
@ 2026-3-7 19:25:20
77
-
@ 2026-3-7 18:03:38 -
@ 2026-3-7 18:03:01 -
@ 2026-3-7 14:44:39
我有小录音机,红色的。
-
@ 2026-3-2 19:17:00简简单单做了一个小游戏,很小的小游戏
#include<bits/stdc++.h> #include<windows.h> #include<time.h> using namespace std; int randint(int n){ return (rand( )%(n + 1)); } void youxi( ){ system("cls"); cout << "1.攻击 , 2.格挡 , 3.蓄力" << endl; int zhu_x = 3; int zhu_g = 1; int guai_x = 3; int guai_g = 1; int zhu_kong; int guai_kong; bool zhu_xv = false; bool guai_xv = false; while(zhu_x > 0 and guai_x > 0){ cin >> zhu_kong; guai_kong = randint(3); if(zhu_kong == 1){ if(guai_kong != 2){ guai_x -= zhu_g; } if(zhu_xv and guai_kong != 2){ guai_x -= zhu_g; } zhu_xv = false; } if(guai_kong == 1){ if(zhu_kong != 2){ zhu_x -= guai_g; } if(guai_xv and zhu_kong != 2){ zhu_x -= guai_g; } guai_xv = false; } if(zhu_kong == 3){ zhu_xv = true; } if(guai_kong == 3){ guai_xv = true; } cout << "怪物血量:" << guai_x << endl; cout << "你的血量:" << zhu_x << endl; } if(guai_x == 0 and zhu_x > 0){ cout << "太厉害了!你胜利了!"; } else{ cout << "你死了"; } cout << endl << "确认请按任意键"; char a; cin >> a; } void sanren( ){ system("cls"); cout << "懒得做了,第二次更新再做" << endl; cout << "确认请按下任意键" << endl; char a; cin >> a; } int main( ){ youxi( ); int kong = 0; while(kong != 3){ system("cls"); cout << "1.开始游戏"; cout << endl; cout << "2.双人模式"; cout << endl; cout << "3.退出"; cout << endl; cin >> kong; if(kong == 1){ youxi( ); } if(kong == 2){ sanren( ); } } return 0; } -
@ 2026-3-2 15:34:10#B2159 AC8 WA2求调
#include<bits/stdc++.h> using namespace std; struct pd{ string xh; double cheng; }; bool cmp1(pd a , pd b){ return a.cheng > b.cheng; } int main( ){ int n; cin >> n; pd a[n]; for(int i = 0; i < n; i++){ cin >> a[i].xh >> a[i].cheng; } sort(a , a + n , cmp1); for(int i = 0; i < n; i++){ cout << a[i].xh << " " << a[i].cheng << endl; } return 0; } -
@ 2026-3-2 14:37:48谁懂啊!一天爆肝26道题的感觉
-
@ 2026-3-1 19:43:15刚买的一个小木鱼,花了1000(硬币,不是RMB),问一下大家有谁买过,好玩吗?
-
@ 2026-3-1 19:41:33为什么我参加不了比赛了,老师回答一下,它要求我输入密码
-
@ 2026-3-1 9:18:38喔喔喔~(刷存在感)
-
@ 2026-2-27 14:27:43


