ABC352
A
link
要先判断是从前往后还是从后往前。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
signed main(){
int n,x,y,z;
cin >> n >> x >> y >> z;
if(x <= y){
if(z > x&&z <= y) cout << "Yes";
else cout << "No";
}
else{
if(z < x&&z >= y) cout << "Yes";
else cout << "No";
}
return 0;
}
B
link
两个指针,分别指向
点击查看代码
#include<bits/stdc++.h>
using namespace std;
char s[200005];
char t[200005];
signed main(){
cin >> s+1 >> t+1;
int n = strlen(t+1);
for(int i = 1,j = 1;i <= n;++ i,++j){
while(t[i] != s[j]) ++i;
cout << i << " ";
}
return 0;
}
C
link
他要求的本质上就是前面所有的肩膀高度加最后一个的头高。
所以我们只要把每中情况都找到即可,那么我们可以先把所有肩膀的高度加起来,然后枚举每一个,把肩膀减去,把头加上去最大即可。
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int x[200005],y[200005];
int cn,ans;
signed main(){
cin >> n;
for(int i = 1;i <= n;++ i){
cin >> x[i] >> y[i];
cn += x[i];
}
for(int i = 1;i <= n;++ i){
ans = max(ans,cn-x[i]+y[i]);
}
cout << ans;
return 0;
}
D
link
如果我们存一个数组
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int p[200005];
int mp[200005];
int mx[200005][20];
int mn[200005][20];
int lg(int x){
if(x == 1) return 0;
return lg(x/2)+1;
}
signed main(){
cin >> n >> k;
for(int i = 1;i <= n;++ i)
cin >> p[i],mp[p[i]] = i;
for(int i = 1;i <= n;++ i)
mx[i][0] = mp[i],
mn[i][0] = mp[i];
for(int j = 1;j <= 19;++ j){
for(int i = 1;i+(1<<j)-1 <= n;++ i){
mx[i][j] = max(mx[i][j-1],
mx[i+(1<<(j-1))][j-1]);
mn[i][j] = min(mn[i][j-1],
mn[i+(1<<(j-1))][j-1]);
}
}
int ans = 0x3f3f3f3f;
int t = lg(k);
for(int i = 1;i+k-1 <= n;++ i){
int man = max(mx[i][t],
mx[(i+k-1)-(1<<t)+1][t]);
int mix = min(mn[i][t],
mn[(i+k-1)-(1<<t)+1][t]);
ans = min(ans,man-mix);
}
cout << ans << endl;
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析