题解 CF1760D Challenging Valleys
大家好,我是 CQ-C2024 蒟蒻 CJH。
题意
给定数组
-
。 -
。 -
或 。 -
或 。
如果恰好只有一段符合以上条件的序列则输出 YES
,否则输出 NO
。
分析思路
这里我们枚举在
再判断是否满足条件 3 和条件 4 即可。
代码
//the code is from chenjh
#include<bits/stdc++.h>
using namespace std;
int a[200002];
void solve(){
int n;scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
//注意数组是从第 0 个开始输入。
bool fl=0;//判断是否有解。
for(int i=0;i<n;){//枚举左端点。
int j;
for(j=i;j<n && a[j]==a[i];j++);//右端点不断向右扩展。
int l=i,r=j-1;//因为此时 j>=n 或 a[j]!=a[i],所以右端点为 j-1。
if((l==0||a[l-1]>a[l]) && (r==n-1||a[r]<a[r+1])){//判断是否满足条件。
if(fl){puts("NO");return;}//已经有一个解,不满足恰好只有一个解。
else fl=1;//标记为有解
}
i=j;
}
puts(fl?"YES":"NO");//有解输出 "YES",无解输出 "NO"。
}
int main(){
int t;scanf("%d",&t);
while(t--) solve();
return 0;
}
谢谢大家!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现