2026萌新联赛第二场--(河南农业大学)
2026萌新联赛第二场河南农业大学补题总结你的心有一道墙 但我发现一扇窗偶尔透出一丝暖暖的微光就算你有一道墙 我的爱会攀上窗台盛放打开窗你会看到悲伤融化这时候林俊杰就有疑问了本场预测难度划分为easyDHIeasy-midABMmidCEFGmid-hardKLhardJ这场比赛就有意思了榜单没有跟着难度走我打的时候也是这样。在赛时我的做题顺序大概是I H M B D L 很可惜啊L题确实是棋差一招啊。不过出题人把它放在mid-hard我是实在不太理解啊这题完全是可以补的呀。当然这个A题出题人把它放在easy-mid也有它的道理。但是在赛时谁看到像语文课文一样的题会想到是一个简单的模拟题呢况且还很有可能读不懂题目(我就是哈语文不好理解不了题意)。当然了奉劝大家在有时间的情况下还是得多卡看看其他的题万一你漏掉了一个能做的只是当时不想做那就太可惜了。题目链接接下来废话不多说开始讲题首先是签到题I题这题就是说让我们取一个右指针然后遍历的时候看右指针会不会移动移动条件就是ia[i]-1ans(右指针)AC代码int n; cinn; vectorint a(n1); for(int i1;in;i) cina[i]; int r1; for(int i1;ir;i) { int shuia[i]-1; if(shun) rn; else rmax(r,shu); } coutrendl;HH题这个题是比上一题还简单的签到题我们对于数组每一个数向上取整累加在一起输出就行了。int n,x,y; cinnxy; vectorint a(n); for(int i0;in;i) cina[i]; int ans0; if(x0||y0){ NO return; } int shumin(x,y); for(int i0;in;i){ ans((a[i]shu-1)/shu); } YES; coutansendl;M题这个M题说实话说的那个多我在赛时是压根不知道它在讲什么但是我们通过看这个题目给的实例就基本上能看个半懂然后根据下面的样例来分析就知道它讲的是啥了。就是一个数组压缩111就压缩成[1 3]也就是3个1那么它让我们输出第k个就很简单了我们把这个数组还原再输出第k个就行了int n; cinn; vectorint v(n1),l(n1); for(int i1;in;i) cinv[i]l[i]; int T; cinT; vectorint ans; while(T--) { int num; cinnum; int shu0; for(int i1;in;i) { if(shul[i]num){ ans.push_back(v[i]); break; }else{ shul[i]; } } } for(int i0;ians.size();i) coutans[i]endl;B题B题的思路就是让这个数求和嘛我们看这个数据很大所以暴力肯定是超时的所以我们就得想一个方法给它优化一下我们不难想到一个数除以一个数等于1的会有很多数(因为向下取整嘛)然后我们就可以利用这个性质来把这个过程给它截出来比如说一个数除以7 8 9都等于1那么我们就把这个7找出来把这个9找出来然后9-71就是这段长度的长31就表示了这段长的和它就可以大大降低我们的时间复杂度这个思路在赛时想了挺久的导致这个代码写成了屎山代码然后在赛后才知道这个思想是分块思想这题还是一个模板题优化的代码十分之简短相比之下我的屎山代码真的是丑爆了赛时ac代码// Problem: 不同的商 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/138554/B // Memory Limit: 1024 MB // Time Limit: 2000 ms // author世间 // Date2026-07-27 13:24:51 #includebits/stdc.h using namespace std; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define endl \n #define int long long #define pii pairint,int #define fi first #define se second #define YES coutYESendl; #define NO coutNOendl; int ksm(int a, int b, int p) { int res 1; while (b) { if (b 1) res res * a % p; a a * a % p; b 1; } return res; } void solve() { int x,y; cinxy; if(x1){ cout1endl; return; } if(y1){ coutxendl; return; } int ansx; if(yx){ yx; int cnt2; while(1){ int shu1x/cnt; if(cnty){ ansshu1; break; } int cntr(x/shu1)1; if(cntry) cntry1; int num(cntr-cnt)*shu1; ansnum; cntcntr; if(cnty) break; // coutcnt shu1 cntr numendl; } coutansendl; }else{ int cnt2; while(1) { int shu1x/cnt; if(cnty) { ansshu1; break; } int cntr(x/shu1)1; if(cntry) cntry1; int num(cntr-cnt)*shu1; ansnum; cntcntr; // coutansendl; if(cnty) break; } coutansendl; } // coutfixedsetprecision(x) } signed main() { IOS; int _1; // cin_; while(_--) solve(); return 0; }优化代码int x,y;cinxy; int an0; if(yx) yx; for(int l1;ly;l){ int rx/(x/l); an(x/l)*(r-l1); lr; } coutanendl;D题这个题本来看到三维切割这肯定得用到很多算法什么前缀和什么差分什么动态啊让我很头疼所以这个题目我在看了一眼只后果断放弃但是回过头看了一下发现它的数据特别小我们暴力打一遍直接救过了。暴力思路就是三维数组三层循环没这里就不过多解释了。AC代码呈上int w,x,h; cinwxh; int q; cinq; int answ*x*h; int a[30][30][30]{0}; while(q--) { int x1,y1,z1,x2,y2,z2; cinx1y1z1x2y2z2; for(int ix1;ix2;i) { for(int jy1;jy2;j) { for(int kz1;kz2;k) { if(a[i][j][k]0){ ans--; a[i][j][k]1; } } } } } coutansendl;A题这个题我在赛时也是直接放弃了文字也是直接劝退主包啊但是这题我们如果理解了题目就很好做数据给的也很少了我们可以直接暴力模拟就可以过。题目大意我们在(0,0)然后我们不会攻击但是我们有一个范围在这个范围是我们的领域我们的棋子会暴击就是x从0-4y从-2-2在这里面我们的棋子会造成基础攻击乘以系数4的伤害在外面的棋子只会造成基础攻击乘以2的伤害。然后输入几组坐标表示外面初始棋子的位置。然后再输入几组坐标这几组坐标有限定条件就是如果在我们的领域内的话我们可以观察它的上下左右有没有棋子要是没有的话我们可以在它的其上下左右都放上一个棋子但是如果我们这一轮放置的棋子在领域外面就没有这个性质。然后外面再输入m个坐标这m个坐标是m个敌人它的位置在哪个棋子的领域内棋子就会爆炸造成伤害(棋子的领域题目i也说了是一个菱形其实在后面我们可以推出来是abs(x差)abs(y差)2就是在它的领域)。然后我们输出这个伤害。好吧其实我解释的也有点过于长了不过没办法这题出的长那它的规则也就有些多只要理解了就很好写了你如果理解了题目大意其实就很好写用一个结构体数组来表示棋子的位置和状态还有暴击的系数然后用set来看哪个位置会不会已经有棋子了然后暴力模拟就出来了。AC代码// Problem: 天下劫 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/138554/A // Memory Limit: 1024 MB // Time Limit: 2000 ms // author世间 // Date2026-07-28 13:02:28 #includebits/stdc.h using namespace std; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define endl \n #define int long long #define pii pairint,int #define fi first #define se second #define YES coutYESendl; #define NO coutNOendl; const int dx[]{1,-1,0,0}; const int dy[]{0,0,1,-1}; struct node{ int x,y,value; bool ok; }; bool check(int x,int y) { return (x0x4y-2y2); } void solve() { int n; cinn; vectornode v; setpii st; st.insert({0,0}); for(int i0;in;i) { int x,y; cinxy; v.push_back({x,y,4,true}); st.insert({x,y}); } int m; cinm; for(int i0;im;i) { int x,y; cinxy; if(check(x,y)){ if(st.find({x,y})st.end()){ v.push_back({x,y,4,true}); st.insert({x,y}); } for(int d0;d4;d) { int nxxdx[d]; int nyydy[d]; if(nx0ny0) continue; if(st.find({nx,ny})st.end()){ int shucheck(nx,ny)?4:2; v.push_back({nx,ny,shu,true}); st.insert({nx,ny}); } } }else{ if(st.find({x,y})st.end()){ v.push_back({x,y,2,true}); st.insert({x,y}); } } } int q; cinq; for(int i0;iq;i) { int xx,yy; cinxxyy; int ans0; vectorintused; for(int j0;jv.size();j) { if(!v[j].ok) continue; if (abs(v[j].x-xx)abs(v[j].y-yy)2){ ansv[j].value*669; used.push_back(j); } } for(auto t:used){ v[t].okfalse; } coutansendl; } // coutfixedsetprecision(x) } signed main() { IOS; int _1; // cin_; while(_--) solve(); return 0; }G题这个题是一个二维前缀和加差分的板子题目吧。就是如果我们熟练于二维差分加前缀和的话这题其实还挺好写的。首先我们定义一个a数组来标记每一个格子被猫覆盖的数量如果被一个覆盖就等于1然后定义一个数组b来表示格子上面有没有猫哈气。初始的ans2000*2000,然后我们找到一个格子的a数组是1那就表示是一个猫覆盖我们就可以把它对应的b数组定义为1然后ans–,然后如果这个格子1那么我们就把对应的b数组定义为0因为不管依次去掉哪个猫这一块都不会从有猫变成无猫然后ans–。我们用差分是为了节省时间复杂度而用前缀和是为了方便取区间比如区间(2,2)到区间(3,3)那么我们想取这个区间只需要v [ 3 ] [ 3 ] − v [ 1 ] [ 2 ] − v [ 2 ] [ 2 ] v [ 1 ] [ 1 ] v[3][3]-v[1][2]-v[2][2]v[1][1]v[3][3]−v[1][2]−v[2][2]v[1][1]所以我们需要用到前缀和的性质。而差分的话我们在输入n个矩形数据的时候想要把所有的二维坐标对应位置都加上1那不现实因为还需要两层循环来实现那么必定会超时所以我们用到了差分。然后用前缀和来实现这个这个格子是1还是0还是大于1再根据这个来判断统计被一个猫占领的区域。AC代码// Problem: Ha~ // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/138554/G // Memory Limit: 1024 MB // Time Limit: 2000 ms // author世间 // Date2026-07-28 09:12:58 #includebits/stdc.h using namespace std; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define endl \n // #define int long long #define pii pairint,int #define fi first #define se second #define YES coutYESendl; #define NO coutNOendl; int a[2010][2010]{0}; int b[2010][2010]{0}; void solve() { int n; cinn; int u[2010]; vectorint d(n5); vectorint l(n5); vectorint r(n5); int ans2000*2000; for(int i1;in;i) { cinu[i]d[i]l[i]r[i]; a[u[i]][l[i]]; a[u[i]][r[i]1]--; a[d[i]1][l[i]]--; a[d[i]1][r[i]1]; } for(int i1;i2000;i) { for(int j1;j2000;j) { a[i][j]a[i][j]a[i-1][j]a[i][j-1]-a[i-1][j-1]; if(a[i][j]1){ ans--; b[i][j]1; }else if(a[i][j]1){ ans--; b[i][j]0; } } } for(int i1;i2000;i) { for(int j1;j2000;j) { b[i][j]b[i][j]b[i-1][j]b[i][j-1]-b[i-1][j-1]; } } for(int i1;in;i) { int numb[d[i]][r[i]]-b[d[i]][l[i]-1]-b[u[i]-1][r[i]]b[u[i]-1][l[i]-1]; coutansnumendl; } // coutfixedsetprecision(x) } signed main() { IOS; int _1; // cin_; while(_--) solve(); return 0; }L题这个题感觉没有哪个难题解说这题是一个字典树板题但是我们不用他们说的也能写啊。这里我来一个听独特的方法仅仅用到哈希表首先呢我们知道哈希表可以存储我们想要存的串但是它的一半串呢我们不知道怎么办但是呢我们可以把它所有的字串全部都存进去然后呢找的时候也能直接找到然后当op3的时候呢我们再依次把它的字串删了但是这里我们得删除把它的字串个数删除完所以这里得改变一下这个字串通过这个s加了几次我们就删除几次。然后进行模拟就行了// Problem: 至理名言 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/138554/L // Memory Limit: 1024 MB // Time Limit: 4000 ms // author世间 // Date2026-07-27 14:56:52 #includebits/stdc.h using namespace std; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define endl \n #define int long long #define pii pairint,int #define fi first #define se second #define YES coutYESendl; #define NO coutNOendl; void solve() { int n; cinn; unordered_mapstring,intmp; while(n--) { int op; cinop; if(op1) { string s; cins; string s1; for(auto x:s){ s1x; mp[s1]; } coutmp[s]endl; } if(op2) { string s; cins; if(mp.count(s)) YES else NO } if(op3){ string s; cins; string s1; int shump[s];//这里我们只删除通过s串加的字串的个数 for(auto x:s){ s1x; mp[s1]-shu; if(mp[s1]0) mp.erase(s1); } } } // coutfixedsetprecision(x) } signed main() { IOS; int _1; // cin_; while(_--) solve(); return 0; }总结​ 有优势有劣势B题通过数学思维把它做出来了还比较可以但是其实这题总过题人数不少了基本上一般人都过了。其次就是差分前缀和一维现在都不太会用这次直接出一个二维的直接给我干爆炸了算法方面还得多练啊其次就是这个L题这个思想当时有点朝这边想了都开了两个map来弄了就差怎么把它的字串删除了这点学长的思维确实厉害。这次排名比上次进步了但是还不是太靠前下次继续努力

相关新闻

Docker零基础入门:从安装到实战部署,解决环境一致性难题

Docker零基础入门:从安装到实战部署,解决环境一致性难题

1. 项目概述:为什么是Docker,以及它能为你带来什么 如果你是一名开发者,或者正在学习编程,那么“环境配置”这个词对你来说一定不陌生。从“在我的机器上能跑”到“在服务器上跑不起来”,这中间的鸿沟,往往…

2026/11/4 10:19:02 阅读更多 →
物流地磅系统核心概念解析:作业类型与皮重类型

物流地磅系统核心概念解析:作业类型与皮重类型

在物流和生产管理场景中,这个“作业类型”通常是用来区分货物在不同状态或地点之间移动的业务类别。以下是它们最常见的意思: 作业类型核心含义举个场景例子倒运短距离的转运或临时性搬迁。通常指在同一个厂区或相邻区域,将货物从一个堆场、…

2026/11/4 12:01:17 阅读更多 →
基于ATTCK框架的内网渗透实战:从Vulnstack靶场到域控攻陷

基于ATTCK框架的内网渗透实战:从Vulnstack靶场到域控攻陷

1. 项目概述:从靶场到实战的桥梁 如果你是一名安全从业者,或者对攻防对抗感兴趣,那么“内网渗透”这个词对你来说一定不陌生。它不再是电影里黑客敲几下键盘就能接管整个公司网络的魔幻场景,而是一套严谨、系统、步步为营的技术与…

2026/11/2 17:36:49 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/6 22:01:09 阅读更多 →

日新闻

周新闻

月新闻