news 2026/7/16 23:17:34

UVa 12788 Smooth Factor

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 12788 Smooth Factor

题目描述

给定一个整数数组a1,a2,…,ana_1, a_2, \ldots, a_na1,a2,,an,定义其平滑因子为:最长的连续子数组ap,…,aqa_p, \ldots, a_qap,,aq的长度,其中至多存在一个位置iiip<i≤qp < i \leq qp<iq)满足ai−1>aia_{i-1} > a_iai1>ai。换句话说,该子数组要么是完全非递减的,要么只包含一次“下降”。

要求对于多个测试用例,分别输出每个数组的平滑因子。

输入格式

  • 多个测试用例,每个用例两行。
  • 第一行:整数nnn1≤n≤1051 \leq n \leq 10^51n105)。
  • 第二行:nnn个整数a1,…,ana_1, \ldots, a_na1,,an0≤∣ai∣<1080 \leq |a_i| < 10^80ai<108)。

输出格式

  • 每个测试用例一行,输出对应数组的平滑因子。

样例输入

3 1 2 3 1 0 8 1 2 1 2 1 2 3 1 4 1 -10 -100 -100

样例输出

3 1 5 3

题目分析

本题要求寻找满足“至多包含一次下降”的最长连续子数组的长度。这里的“下降”指的是ai−1>aia_{i-1} > a_iai1>ai。换句话说,在子数组中,最多只能有一个位置使得前一个元素大于后一个元素。

关键点

  1. 连续性:子数组必须是原数组的连续一段。
  2. 至多一次下降:允许000次或111次下降。
  3. 高效计算nnn最大可达10510^5105,需要O(n)O(n)O(n)O(nlog⁡n)O(n \log n)O(nlogn)的算法。

思路推导

我们可以将问题转化为一个滑动窗口问题:

  • 维护一个窗口[left,right][left, right][left,right]
  • 用计数器dropCountdropCountdropCount记录窗口内下降的次数。
  • dropCount≤1dropCount \leq 1dropCount1时,窗口有效,可以扩展右边界。
  • dropCount>1dropCount > 1dropCount>1时,窗口无效,需要移动左边界直到dropCount≤1dropCount \leq 1dropCount1
  • 在移动左边界时,如果移出的位置原本是一个下降点,则dropCountdropCountdropCount需要减111
  • 每次窗口有效时,用当前窗口长度更新答案。

这样,我们通过一次遍历就能找到最长满足条件的子数组。


算法步骤

  1. 初始化left=0left = 0left=0maxLen=1maxLen = 1maxLen=1(至少长度为111),dropCount=0dropCount = 0dropCount=0
  2. 遍历右边界rightrightright111n−1n-1n1
    • 判断a[right−1]>a[right]a[right-1] > a[right]a[right1]>a[right]?如果是,则dropCountdropCountdropCount111
    • dropCount>1dropCount > 1dropCount>1时:
      • a[left]>a[left+1]a[left] > a[left+1]a[left]>a[left+1],则dropCountdropCountdropCount111
      • leftleftleft111
    • 计算当前窗口长度right−left+1right - left + 1rightleft+1,更新maxLenmaxLenmaxLen
  3. 输出maxLenmaxLenmaxLen

时间复杂度O(n)O(n)O(n),每个元素至多被访问两次。
空间复杂度O(1)O(1)O(1)(不计输入数组)。


代码实现

// Smooth Factor// UVa ID: 12788// Verdict: Accepted// Submission Date: 2025-12-15// UVa Run Time: 0.010s//// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;while(cin>>n){vector<int>a(n);for(inti=0;i<n;++i)cin>>a[i];intleft=0,maxLen=1;// 至少长度为1intdropCount=0;// 窗口中下降的次数for(intright=1;right<n;++right){// 判断 right 是否为下降点if(a[right-1]>a[right])dropCount++;// 如果下降次数超过1,移动左边界直到满足条件while(dropCount>1){// 如果 left 是下降点,移出窗口时减少计数if(a[left]>a[left+1])dropCount--;left++;}// 更新最大长度maxLen=max(maxLen,right-left+1);}cout<<maxLen<<"\n";}return0;}

示例分析

以样例1 2 1 2 1 2 3 1为例:

  • 最长满足条件的子数组为1 2 1 2 3,长度为555
  • 其中只有一次下降(2>12 > 12>1),其余位置均非递减。

算法过程:

  • 窗口滑动过程中,当遇到第二次下降时(例如3>13 > 13>1),左边界移动,直到窗口中只保留一次下降,从而找到最长窗口。

总结

本题通过滑动窗口维护一个至多包含一次下降的连续子数组,在O(n)O(n)O(n)时间内求解。关键在于用dropCountdropCountdropCount记录下降次数,并通过移动左边界保持条件成立。代码简洁高效,适用于大数据范围。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 0:29:57

基于西门子PLC1200的钢板恒张力放卷收卷系统大揭秘

基于西门子PLC1200的钢板恒张力放卷收卷系统&#xff0c;一共有6种不同的要求&#xff0c;自己注意仔细甄别&#xff0c;防止交错在工业生产中&#xff0c;钢板的放卷与收卷过程保持恒张力至关重要&#xff0c;这直接影响到产品的质量与生产效率。西门子PLC1200凭借其强大的功能…

作者头像 李华
网站建设 2026/7/16 3:34:02

如何通过LangFlow降低AI开发门槛?一文读懂

如何通过 LangFlow 降低 AI 开发门槛&#xff1f; 在大模型技术席卷各行各业的今天&#xff0c;越来越多团队开始尝试构建基于大语言模型&#xff08;LLM&#xff09;的应用——从智能客服到知识库问答&#xff0c;从自动化报告生成到个性化推荐系统。然而&#xff0c;现实往往…

作者头像 李华
网站建设 2026/7/16 18:41:38

深度学习环境搭建指南:TensorFlow + 清华源 + Docker

深度学习环境搭建新范式&#xff1a;TensorFlow 清华源 Docker 在人工智能项目落地的过程中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是“为什么代码在我机器上能跑&#xff0c;在服务器却报错&#xff1f;”——这个看似简单的问题背后&#xff0c;是依…

作者头像 李华
网站建设 2026/7/14 11:48:01

Qwen3-32B Docker镜像5分钟快速部署指南

Qwen3-32B Docker镜像5分钟快速部署指南 在智能研发工具逐渐成为标配的今天&#xff0c;你有没有遇到过这样的窘境&#xff1a;团队急需一个能读文档、写代码、解释复杂逻辑的AI助手&#xff0c;结果试了一圈开源模型&#xff0c;不是“上下文一长就失忆”&#xff0c;就是“连…

作者头像 李华
网站建设 2026/7/16 19:29:52

YOLOv8 Segmentation实例分割实战教程

YOLOv8 实例分割实战&#xff1a;从原理到工业落地 在现代智能视觉系统中&#xff0c;仅仅知道“哪里有什么”已经不够了。越来越多的应用场景要求我们回答&#xff1a;“它具体长什么样&#xff1f;”——这正是实例分割&#xff08;Instance Segmentation&#xff09;的核心使…

作者头像 李华
网站建设 2026/7/15 0:56:13

联通紫金专线200M适合哪些企业?

在当今数字化办公时代&#xff0c;网络连接的质量直接影响到企业的运营效率。对于不少公司来说&#xff0c;选择合适的网络专线就像是挑选一双合脚的鞋子&#xff0c;既要舒适又要实用。联通紫金专线200M作为市场上的一种选择&#xff0c;它是否能够满足你的需求呢?让我们一起…

作者头像 李华