牛客周赛 Round 154

发布时间:2026/8/1 21:08:25
牛客周赛 Round 154 牛客周赛 Round 154补题题解前言变色的生活 任性的挑拨疯狂的冒出了头单方的守候 试探的挑拨却还是少了点什么遥远两端 爱挂在天空飞风停了也无所谓 只因为你总说Everything will be okey本周牛客周赛也是在vp之后的闲余时间开始的由于vp的难度太高导致压根不想写牛客的周赛并且晚上还有cf的周赛所以就先把它放下了。但是主包还是不太放心在几天后也是把它给补了。难度可以说是很低我们看榜单就可以看出来了首先A B是两道签到题能见到两道签到题的周赛也是不多见了然后C题有点思维转变D题的话其实也不是很难知识线动成环而已转动思维思考基本能想出来。下面我们就随便讲解一下题目吧题目入口A题这题不想说就是一个纯签到题就跟hello world一样代码如下double a; cina; cout(int)aendl;B题这个题也很简单读完题我们就知道怎么写了它想要两个一样的数组重新排序使得差值绝对值和最大那肯定是一个正序一个倒序啊秒了int n; cinn; for(int i1;in;i) couti ; coutendl; for(int in;i1;--i) couti ; coutendl;C题这个题的话就是让我们找一个构造方法使得小红位置绝对值和最大那我们在宏观角度就能想y轴的值只跟上下有关x轴得值只跟左右有关所以y周我们只看上下x我们只看左右。首先是有k次删除操作的我们可以这样删看看哪两个最多啊(这里的两个是上下其中一个左右其中一个)然后我们就删除剩余两个一直删除如果遍历完串k还没用完那就随便删除这两个多的方向上的直到k等于0就结束我们把修改后的输出出来就行了。实现方式可以是定义一个对应下标的数组下标是0就是存在1就是不存在// Problem: 小红的序列删除 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/137840/C // Memory Limit: 512 MB // Time Limit: 2000 ms // author世间 // Date2026-07-30 18:46:19 #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 INF1e65; void solve() { int n,k; cinnk; vectorint vis(n3,0); int left0,right0,up0,down0; string s; cins; for(int i0;in;i) { if(s[i]U) up; if(s[i]D) down; if(s[i]L) left; if(s[i]R) right; } char ch1D,ch2R; if(updown) ch1U; if(leftright) ch2L; for(int i0;in;i) { if((s[i]ch1||s[i]ch2)k0){ k--; vis[i]1; } if(k0) break; } if(k0){ for(int i0;in;i) { if(vis[i]0){ vis[i]1; k--; } if(k0) break; } } for(int i0;in;i) { if(!vis[i]) couts[i]; } coutendl; // coutfixedsetprecision(x) } signed main() { IOS; int _1; // cin_; while(_--) solve(); return 0; }D题这个题考察的就是一个环的转换而环的情况下我们可以用到期末来做到环的性质首先我们想到如果一次操作我们遍历一次那肯定是超时的所以这种想法很定时行不通的所以我们肯定得做预处理。我们可以先对它找相邻不同的个数。然后我们可以用01来表示相邻两个之间的状态然后开始进行q次操作它每次给你的lr都有这样的性质中间的状态不会改变而两边会改变(当然了我说的是常规情况)我们肯定得特判其他情况了比如说n1我们就不需要判断直接输出0然后要是lr长度为n那也不需要判断全部反转等于没有反转直接输出ans然后就是rl的情况这种情况我们可以这样转化r变成ll变成r然后再判断l处的情况r处的情况进行0变1 1变0ans或者ans–。根据这些我们就可以写出来了// Problem: 小红的01串 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/137840/D // Memory Limit: 512 MB // Time Limit: 2000 ms // author世间 // Date2026-07-30 19:20:29 #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,q; cinnq; string s; cins; int ans0; vectorint v(n); for(int i0;in;i) { v[i](s[i]s[(i1)%n]); if(!v[i]) ans; } while(q--) { int l,r; cinlr; int len(lr)?(r-l1):(n-lr1); if(n1){ cout0endl; continue; } if(lenn){ coutansendl; continue; } if(lr){ int L(r1)%n; int R(l-1n)%n; lL; rR; } int shu1(l-1n)%n; if(v[shu1]) ans; else ans--; v[shu1]^1; int shu2r; if(shu1!shu2){ if(v[shu2]) ans; else ans--; v[shu2]^1; } coutansendl; } // coutfixedsetprecision(x) } signed main() { IOS; int _1; // cin_; while(_--) solve(); return 0; }后面两题有机会再补吧。其实算法涉及不太多重在思维这周的牛客就是重在思维感觉质量也不是太高啊所以想补题的建议看看后面两题了。这期有点水了奈何主包实力有限有机会一定大展一篇啊。希望对你有帮助