【CTF-编程-NC】上下火车
题目一列火车从始发站开出沿途经过若干车站。由于售票系统的故障车站的统计逻辑变得非常古怪。你作为应急响应小组的一员需要接入系统的远程终端在规定时间内计算出指定车站开出时车上的人数。列车运行规则第 1 站始发站 上车人数为 a无人下车。第 2 站 有 u 人上车同时有 u 人下车。离开本站时车上人数保持为 a 。第 3 站起至第 n-1 站上车人数 等于前两站“上车人数”之和。下车人数 等于上一站的“上车人数”。第 n 站终点站 所有人下车。已知在终点站下车的人数为m。交互说明本题为交互题你需要通过 nc 访问服务器。服务器会连续给出 100 组 随机生成的参数。每组参数包含四个整数a始发站人数、n车站总数、m终点站下车人数、x目标车站。Round [i/100] Stations (n): 13 Initial (a): 5 Total at n-1 (m): 2392 Target station (x): 5直接发送一个整数并换行表示第xxx站开出时车上的总人数。核心思路循环u的值从1到m-1然后遍历第3到第n个车站上车人数的数组shang[i]shang[i-1]shang[i-2]下车人数的数组xia[i]shang[i-1]当前车站人数total[i-1]shang[i]-xia[i]直到某个u的值符合最终人数m即可。有时会因为数值太大而超时那就再来一次编写代码计算方法# 导入必要的库frompwnimport*# 用于网络连接和交互importre# 用于正则表达式匹配defsolve_round(n,a,m,x): 计算指定车站x的车上人数同时计算u值 参数: n: 车站总数 a: 第1站始发站的上车人数 m: 第n站终点站的下车人数即第n-1站结束时的车上人数 x: 目标车站编号 返回: int: 目标车站x的车上人数 # 特殊情况处理ifn1:returnaelifn2:returnaelifn3:return2*aifx3elsea# 初始化数组shang[0]*(n1)# 上车人数数组shang[i]表示第i站的上车人数xia[0]*(n1)# 下车人数数组xia[i]表示第i站的下车人数total[0]*(n1)# 车上人数数组total[i]表示第i站结束时的车上人数# 第1站shang[1]a xia[1]0total[1]a# 尝试不同的u值直到找到满足条件的uforuinrange(0,m1):# u可以等于m# 第2站shang[2]u xia[2]u total[2]total[1]shang[2]-xia[2]# 第3站到第n站foriinrange(3,n1):shang[i]shang[i-1]shang[i-2]# 上车人数 前两站上车人数之和xia[i]shang[i-1]# 下车人数 上一站上车人数total[i]total[i-1]shang[i]-xia[i]# 当前车上人数 前一站车上人数 本站上车人数 - 本站下车人数# 检查第n-1站的车上人数是否等于miftotal[n-1]m:# 找到正确的u值直接返回目标车站x的车上人数returntotal[x]return0# 未找到合适的u返回0# 示例用法if__name____main__:# 测试示例1n20, a5, m51901n20# 车站总数a5# 初始上车人数m51901# 终点站下车人数# 计算第12站的车上人数同时计算u值x12anssolve_round(n,a,m,x)print(f对于n{n}, a{a}, m{m}车站{x}的人数为:{ans})# 测试示例2n6, a5, m17已知结果车站3的人数为10车站4的人数为15车站5的人数为17n6a5m17forxinrange(1,6):anssolve_round(n,a,m,x)print(f对于n{n}, a{a}, m{m}车站{x}的人数为:{ans})# 注意实际比赛中应该调用main()函数连接服务器# main()运行结果对于n20,a5,m51901车站12的人数为:1776对于n6,a5,m17车站1的人数为:5对于n6,a5,m17车站2的人数为:5对于n6,a5,m17车站3的人数为:10对于n6,a5,m17车站4的人数为:11对于n6,a5,m17车站5的人数为:17批量执行importsocketimportre# 导入solve.py中的solve_round函数fromsolveimportsolve_rounddefmain():# 连接信息hostchallenge.qsnctf.comport33522# 创建socket连接withsocket.socket(socket.AF_INET,socket.SOCK_STREAM)ass:s.connect((host,port))# 设置超时s.settimeout(10.0)# 接收并打印初始信息try:initial_datas.recv(4096).decode()print(初始信息:)print(initial_data)exceptsocket.timeout:print(接收初始信息超时)# 循环处理多个回合whileTrue:print(\n 等待新回合 )try:# 接收完整问题# 读取直到收到换行符或足够的数据datawhileTrue:chunks.recv(4096).decode()ifnotchunk:print(连接已关闭)exit()datachunk# 检查是否包含完整的问题包含所有必要参数和结束标记ifYour answer for stationindata:breakprint(接收到完整问题:)print(data)# 检查是否已获得flagifflag{indata.lower()orqsn{indata.lower():print(\n已获得flag!)break# 检查是否需要退出ifnotdata:print(未接收到数据退出)break# 解析问题提取n, a, m, x参数# 使用正则表达式提取与关键参数相关的数字n_matchre.search(rStations \(n\):\s*(\d),data)a_matchre.search(rInitial \(a\):\s*(\d),data)m_matchre.search(rTotal at n-1 \(m\):\s*(\d),data)x_matchre.search(rTarget station \(x\):\s*(\d),data)print(f正则匹配结果: n_match{n_match}, a_match{a_match}, m_match{m_match}, x_match{x_match})ifn_matchanda_matchandm_matchandx_match:nint(n_match.group(1))aint(a_match.group(1))mint(m_match.group(1))xint(x_match.group(1))print(f\n解析到参数: n{n}, a{a}, m{m}, x{x})# 使用solve_round函数计算结果resultsolve_round(n,a,m,x)print(f计算结果:{result})# 发送结果s.sendall(f{result}\n.encode())print(结果已发送)# 接收响应responses.recv(4096).decode()print(响应:)print(response)# 检查响应中是否有真正的flagifflag{inresponse.lower()orqsn{inresponse.lower():print(\n已获得flag!)break# 检查响应是否为错误ifwronginresponse.lower():print(\n计算结果错误继续尝试下一个回合)continueelse:print(无法解析问题提取的数字不足)exceptsocket.timeout:print(接收数据超时)breakexceptExceptionase:print(f处理过程中出错:{e})importtraceback traceback.print_exc()breakif__name____main__:main()运行结果Welcome to the Train Logistic Challenge!等待新回合接收到完整问题: Solve100rounds of theTrain Problemto get the flag. Rules: You have1.5s per round. Good luck!--- Round[1/100]--- Stations(n):12Initial(a):20Total at n-1(m):1726Target station(x):9Your answerforstation9: 正则匹配结果:n_matchre.Match object;span(124,140),matchStations (n): 12,a_matchre.Match object;span(141,156),matchInitial (a): 20,m_matchre.Match object;span(157,179),matchTotal at n-1 (m): 1726,x_matchre.Match object;span(180,201),matchTarget station (x): 9解析到参数:n12,a20,m1726,x9计算结果:660结果已发送 响应:[]Correct!等待新回合接收到完整问题: --- Round[2/100]--- Stations(n):14Initial(a):3Total at n-1(m):4417Target station(x):9Your answerforstation9: 正则匹配结果:n_matchre.Match object;span(23,39),matchStations (n): 14,a_matchre.Match object;span(40,54),matchInitial (a): 3,m_matchre.Match object;span(55,77),matchTotal at n-1 (m): 4417,x_matchre.Match object;span(78,99),matchTarget station (x): 9解析到参数:n14,a3,m4417,x9计算结果:622结果已发送 响应:[]Correct!等待新回合......解析到参数:n19,a4,m15124,x16计算结果:5775结果已发送 响应:[]Correct!等待新回合接收到完整问题: --- Round[100/100]--- Stations(n):7Initial(a):20Total at n-1(m):172Target station(x):1Your answerforstation1: 正则匹配结果:n_matchre.Match object;span(25,40),matchStations (n): 7,a_matchre.Match object;span(41,56),matchInitial (a): 20,m_matchre.Match object;span(57,78),matchTotal at n-1 (m): 172,x_matchre.Match object;span(79,100),matchTarget station (x): 1解析到参数:n7,a20,m172,x1计算结果:20结果已发送 响应:[]Correct!Congratulations!Flag: qsnctf{ad27803e80ec4d7aa2e663aed540aa8a}等待新回合连接已关闭

相关新闻

拯救珍贵回忆!免费开源工具Untrunc帮你修复损坏的MP4视频文件

拯救珍贵回忆!免费开源工具Untrunc帮你修复损坏的MP4视频文件

拯救珍贵回忆!免费开源工具Untrunc帮你修复损坏的MP4视频文件 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 你…

2026/7/28 2:11:03阅读更多 →
学术论文降AI率技术:原理、方案与应用实践

学术论文降AI率技术:原理、方案与应用实践

1. 项目背景与核心痛点2026届学术圈正面临一个前所未有的挑战:随着AI生成内容的泛滥,学术诚信体系遭受严峻考验。我在指导本科生论文时发现,超过60%的初稿存在明显的AI写作痕迹。这不仅导致查重系统频频误判,更严重的是削弱了学生…

2026/7/28 2:11:03阅读更多 →
Vue3全家桶核心技术与实战指南

Vue3全家桶核心技术与实战指南

1. Vue3全家桶深度解析与实践指南作为前端开发者,我们正处在一个技术快速迭代的时代。Vue3自2020年正式发布以来,凭借其卓越的性能优化和更灵活的Composition API,已经成为现代Web开发的首选框架之一。但真正要在项目中用好Vue3,仅…

2026/7/28 2:11:03阅读更多 →
TI bq78PL114 8S EVM评估套件:从开箱到实战的BMS开发指南

TI bq78PL114 8S EVM评估套件:从开箱到实战的BMS开发指南

1. 项目概述:从零上手TI bq78PL114 8S EVM评估套件如果你正在设计或评估一个多串锂离子电池组的管理方案,那么德州仪器(TI)的这套bq78PL114 8S EVM评估模块,绝对是你绕不开的一个“练手神器”。它不是一个简单的演示板…

2026/7/28 3:35:16阅读更多 →
WPS JS宏实现表格数据最后记录提取

WPS JS宏实现表格数据最后记录提取

1. 项目背景与需求场景在日常办公数据处理中,我们经常遇到这样的场景:一个包含多个项目数据的表格,需要提取每个项目最后一条记录进行汇总分析。比如销售部门需要查看各区域最近一次成交数据,人事部门要统计各部门最新入职员工信息…

2026/7/28 3:35:16阅读更多 →
C++ STL核心容器vector、list、map实战指南

C++ STL核心容器vector、list、map实战指南

1. STL快速入门:期末救急指南 作为C标准库的核心组成部分,STL(Standard Template Library)是每个C开发者必须掌握的利器。特别是在期末考试前的冲刺阶段,高效掌握STL的常用语句往往能让你在编程题部分事半功倍。不同于…

2026/7/28 3:35:16阅读更多 →
Codex AI编程助手:从API调用到工程集成的完整实践指南

Codex AI编程助手:从API调用到工程集成的完整实践指南

如果你还在把 Codex 简单理解为“OpenAI 出的那个代码生成工具”,那你的信息可能已经滞后了。随着 AI 技术的快速迭代,Codex 早已超越了最初的定位,它不再仅仅是一个帮你补全几行代码的助手,而是正在演变为一套能够理解复杂意图、执行多步骤任务、甚至整合到各类开发工作流…

2026/7/28 3:35:16阅读更多 →
MongoDB核心特性与实战应用指南

MongoDB核心特性与实战应用指南

1. MongoDB核心特性与适用场景解析MongoDB作为当前最流行的文档型数据库,其核心优势在于灵活的文档模型和水平扩展能力。与传统关系型数据库相比,MongoDB采用BSON(Binary JSON)格式存储数据,这种类JSON的文档结构天然支…

2026/7/28 3:35:16阅读更多 →
DIY智能墙面氛围灯:WS2812B灯带+ESP32方案全解析

DIY智能墙面氛围灯:WS2812B灯带+ESP32方案全解析

1. 项目缘起:当一面白墙在夜晚失去了灵魂我家的客厅有一面大白墙,当初装修时觉得简洁干净,挂上几幅画,白天看着挺舒服。但一到晚上,问题就来了。主灯一关,整个客厅的光源就只剩下沙发旁的落地灯和电视屏幕的…

2026/7/28 3:33:16阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →