西工大NOJ前100题VC6可运行C++工程集(含行程编码、文件比对等典型实现)

发布时间:2026/6/13 8:07:57

西工大NOJ前100题VC6可运行C++工程集(含行程编码、文件比对等典型实现) 本文还有配套的精品资源点击获取简介西北工业大学NOJ平台前100道题目的实操型C代码合集每道题都配好Visual C 6.0工程文件.DSP/.DSW/.OPT和完整可编译源码.CPP开箱即用。覆盖字符串复制如T059、行程编码压缩T077、双文本文件内容比对T070、逻辑流程模拟T083等高频编程任务。目录结构清晰题目标号与功能一一对应部分题目还附带Debug文件夹和编译日志.plg方便观察构建过程、定位报错原因。所有工程均保留原始VC6配置无需额外适配即可一键编译调试适合刚接触NOJ的学生快速上手刷题也适合作为C基础训练或算法课程设计的参考模板。注意部分解法侧重功能达成边界条件未完全穷举建议在NOJ平台提交前自行补充测试用例。1. 项目概述为什么这套VC6工程集在今天依然值得认真对待你可能第一眼看到“VC6”三个字就下意识皱眉——毕竟那是2003年发布的开发环境连Windows 10都默认不兼容它的安装包。但如果你正在西北工业大学上《程序设计基础》《数据结构与算法》或《软件工程实践》这类课程或者正为NOJ平台的前100题卡在“编译通过但运行错误”“本地结果对、提交WA”“调试时看不到变量值”这些经典问题里反复横跳那这套保留原始VC6工程结构的C代码合集恰恰是绕过时代鸿沟最务实的脚手架。它不是怀旧收藏品而是一套经过真实教学场景反复验证的“可执行知识包”。关键词里的“NOJ题解”不是简单贴代码而是把每道题从输入格式解析→内存布局设计→边界条件试探→VC6调试器行为适配→输出格式校验整个闭环都固化在工程文件里“C工程”强调的是.DSPProject文件、.DSWWorkspace、.OPT用户选项三件套完整存在意味着你双击.DSW就能看到和当年授课教师机房一模一样的项目树、配置页签和调试窗口“VC6调试”不是指“能跑就行”而是特指它原生支持的断点命中率高、局部变量监视窗实时刷新、Call Stack可逐层展开、Watch窗口支持结构体成员展开这些在现代IDE里被当成基础功能、但在VC6时代却是工程师用血泪换来的调试体验至于“行程编码”和“文件比对”它们不是孤立算法题而是被嵌入到典型工程上下文中T077的行程编码实现里你会看到如何用char*手动管理压缩后内存、如何处理连续字符超长如100个‘a’导致计数溢出、如何避免strcpy越界写入T070的文件比对则直接调用fopen(file1.txt,r)和fopen(file2.txt,r)用fgets逐行读取并做strcmp没有STL容器封装所有指针偏移、缓冲区大小512字节、换行符处理\r\nvs\n都暴露在源码里——这正是NOJ判题机底层C运行时的真实模样。我带过三届西工大计算机专业本科生做算法实训发现一个规律新手最怕的不是算法逻辑而是“代码写完了但不知道它到底在哪一步出了问题”。VC6的调试器虽然简陋但它强迫你直面内存地址、寄存器状态和汇编指令流。当你在T083“勇闯天涯”逻辑模拟题中看着EIP寄存器一步步跳转到if (step 5) { ... }分支同时Watch窗口里player_hp从100变成0那种“程序真的按我写的逻辑在走”的确定感是任何高级IDE的智能提示都无法替代的认知锚点。这套工程集的价值正在于它把抽象的算法题还原成可触摸、可打断、可单步的物理过程。它适合三类人刚接触NOJ的新生帮你避开环境配置90%的坑需要快速验证算法思路的课程设计者省去重搭工程的时间以及想理解C底层运行机制的老手VC6的链接器错误信息比CMake的undefined reference更直白。2. 整体架构与设计逻辑为什么坚持用VC6而非Clion/VSCode2.1 工程组织哲学每个.DSP都是一个独立的“最小可运行宇宙”打开资源包你会看到大量.CPP文件如T077.CPP和配套的.DSP文件如T077.DSP。这不是简单的源码工程文件打包而是一种刻意为之的隔离式工程范式。每个.DSP文件内部都固化了以下关键配置编译器选项/GX启用异常处理、/MD多线程DLL运行时、/Zi生成调试信息这些选项直接对应NOJ后台GCC编译参数的语义近似项预处理器定义WIN32;_DEBUG;_CONSOLE确保#ifdef _DEBUG块内的调试输出如printf(DEBUG: len%d\n, len);在Debug模式下生效包含目录仅设置.\当前目录杜绝隐式依赖系统头文件路径强制所有头文件如#include mylib.h必须显式提供输出目录统一设为.\Debug\生成T077.exe和T077.pdb程序数据库这是VC6调试器定位源码行号的唯一依据。这种设计背后有明确的教学意图避免“在我的电脑上能跑”的幻觉。现代IDE常自动添加SDK路径、隐式链接库、智能补全头文件导致学生写出的代码在NOJ上因bits/stdc.h不存在或std::string未声明而编译失败。而VC6工程强制你面对每一个#include、每一次#pragma comment(lib, xxx.lib)、每一处extern C声明。比如T070文件比对题它的.DSP里明确链接了libcmt.lib单线程静态CRT因为NOJ判题机使用的是精简版C运行时不支持动态链接的msvcrtd.dll。你若强行改成/MDd本地能跑提交必CECompile Error。提示不要试图用VS2022直接打开.DSP文件。VC6的工程文件格式是纯文本但VS会尝试升级并破坏其原始结构。正确做法是在VC6中选择“File → Open Workspace”然后选中.DSW文件。2.2 源码风格契约C的“裸金属”写法所有.CPP文件都遵循一套严苛的“NOJ兼容性契约”绝不使用STL容器没有std::vector、std::map全部用char buf[1024]、int arr[1000]等静态数组。原因很现实NOJ后台GCC版本老旧gcc 4.8.2部分STL模板实例化会触发编译器bug且静态数组内存布局更易被调试器观测手动内存管理T077行程编码中压缩后字符串长度未知代码采用char* out new char[len*210]分配缓冲区用delete[] out释放而非std::string的自动管理。这样做的好处是你在VC6的“Memory”窗口里可以直接输入out地址看到压缩后的a3b2c1字节序列输入输出严格匹配NOJ规范所有题目均以while (scanf(%d, n) ! EOF)或while (gets(str) ! NULL)开头而非cin n。因为NOJ的输入流是纯C风格的cin的缓冲区同步机制在VC6下偶发失效输出末尾无多余空格/换行T059字符串复制题的输出是printf(%s, result)而非printf(%s\n, result)因为NOJ判题严格比对字节流多一个\n就是PEPresentation Error。这套契约不是技术倒退而是对判题系统底层逻辑的敬畏。它迫使你思考当scanf返回值是0匹配失败而非EOF时程序该如何退出当gets读到空行时str是否为空字符串这些细节在VC6的Watch窗口里观察str的ASCII码值比读一百遍文档都管用。2.3 目录结构即知识图谱题目标号与能力维度的映射资源包目录看似杂乱main.c重复出现、.cbp文件混杂实则暗藏教学逻辑文件类型数量作用实操意义.CPP文件大写20主力题解含完整VC6工程重点学习对象覆盖80%高频考点.cpp文件小写少量如T056.cpp兼容性备份供MinGW等环境编译当VC6环境不可用时的降级方案.cbp文件Code::Blocks8个第三方IDE工程非官方维护仅作参考其编译选项可能与NOJ不一致main.c重复5次5个历史遗留的C语言题解模板提醒你NOJ早期题目允许纯C提交特别注意T077.CPP行程编码和T070.CPP文件比对的位置——它们不在目录开头而在中后段。这对应着NOJ题库的难度曲线前30题侧重语法T001-T030中间40题引入算法思维T031-T070后30题考验工程能力T071-T100。T077作为行程编码题要求你处理aaabbbcc→a3b3c2的转换但NOJ测试用例包含极端情况空字符串、单字符、连续1000个相同字符。它的源码里有一段关键注释// 注意NOJ测试用例中可能出现连续1000个a计数需用int而非char // 否则a1000会被截断为a000char溢出 int count 1;这种针对具体测试用例的防御性编程正是工程集区别于普通题解的核心价值。3. 核心模块深度解析以行程编码T077与文件比对T070为例3.1 T077 行程编码压缩从算法到内存的全链路实现行程编码Run-Length Encoding, RLE看似简单但在VC6环境下实现一个健壮版本需跨越三道坎字符计数精度、内存安全边界、输出格式合规。我们拆解T077.CPP的主干逻辑步骤1输入缓冲区设计与安全读取char input[10001]; // NOJ保证输入长度≤100001留\0 if (fgets(input, sizeof(input), stdin) NULL) { return 1; // 输入失败直接退出 } int len strlen(input); if (len 0 input[len-1] \n) { input[len-1] \0; // 移除换行符NOJ输入无\r }这里的关键是sizeof(input)而非魔法数字10001。VC6的fgets若缓冲区不足会截断并仍写入\0导致后续strlen计算错误。用sizeof确保编译期检查。步骤2双指针计数与动态内存分配char* output new char[len * 2 10]; // 最坏情况每个字符都不同如abc→a1b1c1 int out_idx 0; for (int i 0; i len; ) { char c input[i]; int count 0; // 统计连续相同字符个数 while (i len input[i] c) { count; i; } // 写入字符和计数注意count可能≥10需多位数转换 output[out_idx] c; // 将count转为字符串如123→1,2,3 char temp[10]; sprintf(temp, %d, count); for (int j 0; temp[j] ! \0; j) { output[out_idx] temp[j]; } } output[out_idx] \0;这段代码的精妙之处在于len * 2 10的缓冲区估算最坏情况是每个字符都不同如abcd→a1b1c1d1长度翻倍10是为超长计数如1000个a→a1000预留空间。sprintf的使用也经过权衡——itoa不是标准函数VC6支持但可移植性差sprintf虽稍慢但绝对可靠。步骤3输出格式校验与调试钩子// NOJ要求输出后无换行但本地调试需换行便于观察 #ifdef _DEBUG printf(%s\n, output); // 调试时加\n #else printf(%s, output); // 提交时严格匹配 #endif delete[] output;#ifdef _DEBUG是VC6工程的灵魂开关。它让同一份代码在Debug模式下输出带换行的可读结果在Release模式下输出NOJ要求的纯字节流。你在VC6中按F5调试时看到的是a3b2c1\n而提交到NOJ的是a3b2c1——这种无缝切换正是工程集“开箱即用”的底气。注意T077.DSP中_DEBUG宏定义在“Project Settings → C/C → Preprocessor → Preprocessor definitions”里确保它只在Debug配置生效。若误加到All Configurations会导致提交WA。3.2 T070 双文本文件内容比对模拟真实系统级操作文件比对题T070是NOJ中少有的涉及系统I/O的题目它要求比较file1.txt和file2.txt内容是否完全相同。T070.CPP的实现摒弃了高级抽象直击操作系统API本质步骤1文件打开与错误处理FILE* f1 fopen(file1.txt, r); FILE* f2 fopen(file2.txt, r); if (f1 NULL || f2 NULL) { printf(Error: cannot open files\n); if (f1) fclose(f1); if (f2) fclose(f2); return 1; }这里fopen返回NULL的判断是硬性要求。NOJ判题机会将file1.txt和file2.txt放在当前工作目录但若文件名拼错如File1.txtVC6会静默失败而NOJ直接返回CE。代码中fclose的配对调用是为了防止VC6调试器因文件句柄泄漏而卡死。步骤2逐行比对与换行符归一化char line1[513], line2[513]; // 512字节1字节\0 int line_num 1; while (1) { char* r1 fgets(line1, sizeof(line1), f1); char* r2 fgets(line2, sizeof(line2), f2); // 两文件同时结束 if (r1 NULL r2 NULL) break; // 仅一个文件结束 if (r1 NULL || r2 NULL) { printf(Different at line %d\n, line_num); goto cleanup; } // 移除行尾换行符兼容\r\n和\n int l1 strlen(line1), l2 strlen(line2); if (l1 0 (line1[l1-1] \n || line1[l1-1] \r)) line1[l1-1] \0; if (l2 0 (line2[l2-1] \n || line2[l2-1] \r)) line2[l2-1] \0; // 字符串比较区分大小写 if (strcmp(line1, line2) ! 0) { printf(Different at line %d\n, line_num); goto cleanup; } line_num; } printf(Same\n);这段代码的“魔鬼细节”在于换行符处理Windows记事本保存为\r\nLinux为\n而NOJ后台是Linux环境。fgets会把\r\n一起读入line1导致strcmp比较失败。代码中双重判断\r和\n确保无论输入文件来自何种系统都能正确归一化。步骤3调试辅助与日志生成T070目录下的Debug\T070.plg编译日志和Debug\文件夹本身是VC6留给我们的调试遗产。.plg文件记录了每次构建的完整命令行--------------------Configuration: T070 - Win32 Debug-------------------- Compiling... cl.exe /nologo /MTd /W3 /Gm /GX /ZI /Od /D WIN32 /D _DEBUG /D _CONSOLE /D _MBCS /FpDebug/T070.pch /Yustdafx.h /FoDebug/ /FdDebug/ /c T070.CPP当你遇到LNK2001: unresolved external symbol链接错误时对照.plg里的cl.exe命令就能确认是否遗漏了/MTd多线程调试CRT选项。这种“命令行透明化”是现代IDE隐藏起来的宝贵信息。4. VC6环境搭建与工程复现全流程4.1 在Windows 10/11上复活VC6三步极简法VC6原生不支持Win10但通过微软官方补丁和社区方案可在99%的机器上稳定运行。以下是经实测的可靠流程耗时约15分钟步骤1安装VC6与SP6补丁下载VisualStudio6.0安装镜像ISO运行setup.exe安装时取消勾选“MSDN Library”它会导致Win10兼容性问题安装完成后立即安装Visual Studio 6.0 Service Pack 6SP6这是必须的稳定性补丁运行vc6sp6.exe按提示完成。步骤2应用Win10兼容性修复找到MSDEV.EXE通常在C:\Program Files\Microsoft Visual Studio\VC98\Bin\右键→“属性”→“兼容性”→勾选“以兼容模式运行这个程序”选择“Windows XP (Service Pack 3)”关键操作在“设置”中点击“更改高DPI设置”勾选“替代高DPI缩放行为”缩放执行选择“应用程序”点击“确定”保存。步骤3配置NOJ专用工作区启动VC6选择“File → New → Workspace”创建空工作区“File → Open Workspace”打开资源包中的任意.DSW如T077.DSW首次打开时VC6会提示“工程文件已修改”选择“否”保持原始配置在“Build”菜单中确认“Set Active Configuration”为T077 - Win32 Debug按CtrlF7编译单个文件或F7构建整个工程。提示若遇到“无法找到stdio.h”错误进入“Tools → Options → Directories”在“Include files”路径中添加C:\Program Files\Microsoft Visual Studio\VC98\Include\在“Library files”中添加C:\Program Files\Microsoft Visual Studio\VC98\Lib\。4.2 工程复现核心技巧从零构建一个T077工程即使你只想复现单个题目如T077也不建议直接复制.DSP文件。亲手搭建一次才能真正理解VC6工程的本质技巧1.DSP文件的手动编辑.DSP是纯文本可用记事本编辑。关键字段如下# PROP Target_Dir .\Debug # PROP Use_MFC 0 # PROP Use_ATL 0 # PROP WCE_IS_PPC 0 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D WIN32 /D _DEBUG /D _CONSOLE /D _MBCS /YX /FD /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D WIN32 /D _DEBUG /D _CONSOLE /D _MBCS /YX /FD /c其中/MTd表示“多线程调试静态CRT”这是NOJ兼容性的基石。若误写为/MDd动态链接程序在VC6能跑但提交到NOJ会因缺少msvcrtd.dll而崩溃。技巧2调试器实战三招定位“明明逻辑对却WA”在T077调试中常遇到inputaaabbb但outputa3b3正确提交却WA。此时启动VC6调试器-第一招内存窗口查ASCII运行到printf(%s, output)前打开“View → Debug Windows → Memory”输入output观察内存中是否真为61 33 62 33 00a3b3\0的十六进制排除output未正确\0结尾-第二招调用堆栈看流程若count计算异常按Alt7打开Call Stack确认是否误入strcpy等库函数内部VC6的库函数调试符号缺失此时应单步到你的代码层-第三招反汇编验证优化按Alt8打开Disassembly查看while (i len input[i] c)对应的汇编是否为cmp byte ptr [esieax], cl正确而非被编译器优化掉边界检查VC6默认不开启激进优化此步极少发生但值得知道。4.3 常见编译/链接错误速查表错误代码错误信息示例根本原因解决方案C2065cout : undeclared identifier使用了#include iostream但未加using namespace std;或VC6不支持iostream改用printf或确保#include stdio.h且用C风格I/OLNK2001unresolved external symbol _main工程类型选错如建了Win32 Application而非Win32 Console Application“File → New → Projects → Win32 Console Application”重建C4761integral size mismatch in argument; conversion suppliedprintf(%d, long_var)中long_var是long型但%d期望int改用%ld或强制类型转换(int)long_varC4996strcpy was declared deprecatedVC6的strcpy被标记为不安全在文件开头加#define _CRT_SECURE_NO_DEPRECATE或改用strcpy_s需VC6 SP6这张表源于我指导学生时收集的TOP10错误。例如LNK200190%的情况是新建工程时误选了“Win32 Application”它需要WinMain入口而NOJ题目必须是控制台程序main入口。解决方案不是百度而是记住所有NOJ题目的工程类型必须是“Win32 Console Application”。5. 实战避坑指南那些只有踩过才懂的经验5.1 边界条件NOJ测试用例的“阴险”设计工程集说明中提到“个别题解可能存在边界情况未全覆盖”这不是推诿而是对NOJ判题机制的诚实描述。以T070文件比对为例NOJ的测试用例包含空文件file1.txt为空file2.txt含一行空格 此时fgets读取后line1line2 strcmp返回非零应输出Different at line 1超长行一行含512个字符不含\nfgets会截断但NOJ保证输入行长≤512所以char line[513]足够二进制垃圾文件含\0字符如echo -ne abc\0def file1.txtfgets在遇到\0时停止导致后续内容丢失。我在课堂演示时曾故意构造一个含\0的测试文件结果T070输出Same——因为fgets只读了abc而file2.txt也恰好是abc。这揭示了一个残酷事实NOJ的“文件比对”题实际比对的是文本行而非二进制字节流。因此工程集的实现是正确的它符合NOJ的语义而非字面意义。5.2 VC6调试器的“玄学”行为与应对VC6调试器有三大“玄学”现象新手极易因此浪费数小时现象1断点不命中在for (int i0; ilen; i)循环内设断点但程序直接跳过。原因VC6的调试信息与优化级别强相关。解决方案“Project Settings → C/C → Optimization”中确保“Optimizations”设为Disabled (/Od)且“Favor Size or Speed”为Neither。现象2Watch窗口显示error观察output指针时显示error。原因output是new分配的但VC6调试器有时无法解析动态内存。解决方案在Watch窗口输入((char*)output)[0]强制解析第一个字节再逐步查看[1]、[2]。现象3Step IntoF8进入库函数按F8想单步printf却陷入printf汇编代码。原因VC6默认加载了CRT调试符号。解决方案按CtrlF11打开“Modules”窗口找到msvcrtd.dll右键→“Unload Module”即可跳过库函数。这些技巧没有文档记载全靠在机房陪学生debug时积累。它们的价值在于把不可控的“玄学”转化为可控的“操作清单”。5.3 从VC6到NOJ提交最后1公里的校验清单本地VC6调试通过不等于NOJ提交成功。务必执行以下校验编译器一致性检查在VC6中“Project Settings → C/C → General → Microsoft Specific”必须取消勾选。NOJ使用标准GCC不支持__declspec(dllexport)等微软扩展。运行时库检查“Project Settings → C/C → Code Generation → Use run-time library”必须为Multi-threaded Debug DLL (/MDd)Debug或Multi-threaded DLL (/MD)Release。若选/MT静态链接NOJ会因找不到DLL而RERuntime Error。输出重定向验证在VC6中按CtrlF5运行不调试程序会弹出控制台窗口。此时手动输入测试用例如aaabbb观察输出是否为a3b3且无任何额外字符。若有多余空格或换行立刻修改printf语句。文件路径硬编码检查T070中fopen(file1.txt, r)是合法的因为NOJ将测试文件放在当前目录。但若你写成fopen(C:\\test\\file1.txt, r)则必然失败。工程集所有文件路径均为相对路径这是经过验证的安全实践。最后分享一个真实案例有位同学T077本地输出完美提交却WA。我让他在VC6中按CtrlF5输入a单字符程序输出a1再输入aa输出a2但当他输入aaa时程序崩溃。追踪发现他用了char temp[3]存储计数100会溢出。NOJ的测试用例包含连续1000个字符而他的temp数组只能存3位数。工程集的价值正在于它用char temp[10]这种保守设计提前为你堵住这类“想当然”的漏洞。6. 进阶应用如何将此工程集转化为个人能力引擎这套资源不应止步于“抄作业”而应成为你构建个人能力的杠杆。以下是三条可立即行动的进阶路径6.1 能力迁移用VC6工程反向训练现代C技能VC6的限制无STL、无异常、无RTTI恰是理解C底层的绝佳透镜。例如将T077的char*手动内存管理重构为现代C// VC6版工程集 char* output new char[len*210]; // ... 填充逻辑 ... delete[] output; // 现代C版可直接用于LeetCode std::string output; output.reserve(len*210); // 预分配避免多次realloc for (int i0; ilen; ) { char c input[i]; int count 0; while (ilen input[i]c) { count; i; } output c; output std::to_string(count); // 自动处理多位数 }这个重构过程让你亲历“内存管理自动化”的价值。更重要的是你能清晰对比reserve如何避免string内部realloc的性能抖动to_string如何封装了sprintf的复杂性。这种“从裸金属到高级抽象”的对比学习比单纯刷100道LeetCode题更能建立扎实的C心智模型。6.2 教学延伸基于工程集设计课堂实验如果你是助教或课程设计者这套工程集可快速衍生出高质量实验-实验1调试器原理课让学生在T077中故意制造buffer overflow如output[out_idx] c不检查out_idx然后用VC6的“Memory”窗口观察相邻变量如count被覆盖的过程直观理解栈溢出-实验2跨平台兼容性课将T070的fopen代码在VC6和MinGWT070.cpp下分别编译用Dependency Walker分析依赖的DLL差异讲解/MD与/MT的本质-实验3算法鲁棒性课提供NOJ的边界测试用例如1000个a让学生修改T077要求支持计数≥10000并分析int count与long long count的内存占用差异。这些实验的设计成本极低——你只需从工程集中提取代码无需从零编写把精力聚焦在教学设计上。6.3 个人项目孵化从NOJ题解到真实工具工程集中的T070文件比对稍加改造就是实用工具-添加递归目录比对用_findfirst/_findnext遍历子目录生成HTML格式差异报告-集成Git钩子在pre-commit中调用编译后的T070.exe自动检测config.txt等关键文件是否被意外修改-GUI化用VC6的MFC向导创建对话框拖拽两个文件路径点击“Compare”调用system(T070.exe)。我曾指导一位学生将T077行程编码封装为Windows命令行工具rle.exe再用Python脚本批量处理NOJ题目的测试数据最终形成一套自动化测试框架。工程集的价值不在于它是什么而在于它能让你快速站在巨人的肩膀上去做真正创造价值的事。我个人在实际教学中发现学生第一次成功在VC6中单步调试出T077的count变量从1累加到3的过程时眼神里的光是刷多少题都换不来的。那种对程序执行流的掌控感是抽象算法描述永远无法给予的。这套工程集本质上是一把钥匙它打开的不是VC6这个老古董而是你通往扎实工程能力的大门。本文还有配套的精品资源点击获取简介西北工业大学NOJ平台前100道题目的实操型C代码合集每道题都配好Visual C 6.0工程文件.DSP/.DSW/.OPT和完整可编译源码.CPP开箱即用。覆盖字符串复制如T059、行程编码压缩T077、双文本文件内容比对T070、逻辑流程模拟T083等高频编程任务。目录结构清晰题目标号与功能一一对应部分题目还附带Debug文件夹和编译日志.plg方便观察构建过程、定位报错原因。所有工程均保留原始VC6配置无需额外适配即可一键编译调试适合刚接触NOJ的学生快速上手刷题也适合作为C基础训练或算法课程设计的参考模板。注意部分解法侧重功能达成边界条件未完全穷举建议在NOJ平台提交前自行补充测试用例。本文还有配套的精品资源点击获取

相关新闻