夜雨聆风学习资料网

ARTICLE · 997401

2026航模竞赛真题:航迹观测窗口解析

2026航模竞赛真题:航迹观测窗口解析

2026航模竞赛真题:航迹观测窗口解析

 🛰️ 开学季特训|「飞向北京·飞向太空」全国青少年航空航天模型教育竞赛(教育部白名单)的无人机编程飞行赛项,要求选手在风速波动中规划最稳的航迹。今天我们用一道原创「真题」拆解滑动窗口算法。 

  

一、题目背景

在无人机编程飞行赛项中,裁判会连续记录 N 天的瞬时风速(单位 cm/s)。无人机安全飞行要求当天风速不超过阈值 K。我们把「一段连续天数,每天风速都 ≤ K」称为一个适宜飞行窗口。请回答三个问题:

  • 最长适宜飞行窗口包含多少天?
  • 该最长窗口最早从第几天开始(1-based)?
  • 共有多少个不同的起始日能取到该最长长度?

二、样例

输入:N=10, K=5,风速序列 [3,5,2,8,1,4,6,2,3,9]

输出:3 1 1(最长窗口为前 3 天 [3,5,2],从第 1 天开始,仅此 1 个起点)。

  

三、滑动窗口思路拆解

核心观察:窗口内所有元素都必须 ≤ K,因此一旦碰到某天风速超标,包含这一天的任何窗口都作废,只能从它的下一天重新开窗口。维护左右指针 left / right:

  1. 右指针 right 逐天右移;
  2. 若 w[right] > K,令 left = right+1,当前窗口清空;
  3. 否则当前窗口长度 L = right-left+1,用它更新「最长长度 / 最早起点 / 等长起点计数」。

四、C++ 参考代码

#include <iostream> #include <vector> using namespace std;  int main() {     int n, K;     if (!(cin >> n >> K)) return 0;     vector<int> w(n);     for (int i = 0; i < n; i++) cin >> w[i];      int left = 0, maxlen = 0, best_start = 0, count = 0;     for (int right = 0; right < n; right++) {         if (w[right] > K) { left = right + 1; continue; } // 风速超标,窗口作废,从下一天重开         int L = right - left + 1;         if (L > maxlen)      { maxlen = L; count = 1; best_start = left; }         else if (L == maxlen) { count++; }                 // 又出现一个等长起点     }     // 输出:最长窗口长度 / 最早起始日(1-based) / 达标起点个数     cout << maxlen << " " << (maxlen ? best_start + 1 : 0) << " " << count << endl;     return 0; }

五、Python 参考代码

def solve(w, K):     n = len(w)     left = 0     maxlen = 0     best_start = 0     count = 0     for right in range(n):         if w[right] > K:           # 风速超标,窗口作废,从下一天重开             left = right + 1             continue         L = right - left + 1         if L > maxlen:             maxlen = L             count = 1             best_start = left         elif L == maxlen:          # 又出现一个等长的达标起点             count += 1     start = best_start + 1 if maxlen else 0     return maxlen, start, count  # 样例 w = [3, 5, 2, 8, 1, 4, 6, 2, 3, 9] print(solve(w, 5))   # -> (3, 1, 1) 
  

六、复杂度与边界

  • 时间复杂度 O(N),每个元素最多被左右指针各访问一次;
  • 空间复杂度 O(1)(仅用几个标量);
  • 边界:所有天都超标时最长窗口为 0,起点输出 0;序列等长窗口可能多个,计数需累加。

七、考点拆解(7 点)

  1. 双指针滑动窗口
    :右扩左缩维护合法区间;
  2. 合法性判定
    :窗口内元素全部满足条件,遇违例立即重开;
  3. 最值记录
    :边扫边维护最大长度与对应起点;
  4. 计数去重
    :等长窗口用计数器累加,避免遗漏多个起点;
  5. 1-based 与 0-based
    :输出时下标 +1 转换;
  6. 全违例边界
    :最长长度为 0 时起点应返回 0;
  7. 线性思维
    :把"连续子段"问题从 O(N²) 暴力压到 O(N)。

八、动手练一练

把序列改成 [4,4,2,7,4,4,2,7,4,4,2,1]、K=5,最长窗口是多少天、从第几天开始?欢迎在评论区贴出你的运行结果,下期拆解「单调队列」变体。

📚 免费少儿编程资料(夸克网盘领取)

以下资料来自夸克网盘分享。个人号链接暂不支持直接点击,请长按或复制下方链接,打开夸克网盘 App / 网页粘贴即可保存:

  1. 1. 全国青少年信息素养大赛复赛集训题目Python&C++.docx
    https://pan.quark.cn/s/93995d3cb150
  2. 2. 2024信息素养-智能算法应用挑战赛-复赛初中组题目7月7日.pdf
    https://pan.quark.cn/s/da97b5dbf75d
  3. 3. Python背记手册.pdf
    https://pan.quark.cn/s/7568ae9ca92b
  4. 4. Python课程
    https://pan.quark.cn/s/a94bf02d00c6
  5. 5. 2024信息素养大赛图形化复赛集训题答案3-9
    https://pan.quark.cn/s/6ccab7ec3cbc
  6. 6. 2025年03月份电子学会考级真题
    https://pan.quark.cn/s/4403c4228912
  7. 7. 2025全国青少年信息素养大赛赛项说明
    https://pan.quark.cn/s/d9d0df4a9f29
  8. 8. 青少儿信息素养大赛编程资料
    https://pan.quark.cn/s/4ab6bd83be8a

资料持续更新,关注本号第一时间获取新分享。

相关学习资料