#AEAI01008. 距离读数两阶段清洗

距离读数两阶段清洗

题目描述

距离传感器的时间序列里可能混有缺失值、量程外读数和突发离群点。自动化科协具身智能部希望保留可靠读数的原始时间编号,方便回看对应时刻的机器人状态。

请对原始距离读数执行一次两阶段清洗:先删除缺失值和量程外读数,再用第一阶段保留值计算均值、总体标准差,并按 Z-score 阈值筛除离群点。输出最终保留读数的数量和原始 1-based 编号。

输入格式

  • 第一行包含整数 n。
  • 第二行包含三个浮点数 L、U、K。
  • 若 n > 0,第三行包含 n 个原始距离读数,其中 -1 表示缺失值。

输出格式

  • 第一行输出保留读数数量 m。
  • 若 m > 0,第二行按原始时间顺序输出保留读数的 1-based 原始编号。
  • 若 m = 0,只输出第一行 0;不输出均值或读数值。

数据范围与约束

  • 0 <= n <= 100000
  • 0 <= L < U
  • K >= 0

判定规则

使用标准输出比较。两阶段清洗只执行一次,细节按下列规则处理。

  • 第一阶段删除读数等于 -1、小于 L 或大于 U 的观测。
  • 第二阶段只用第一阶段保留值计算均值和总体标准差。
  • std <= 1e-12 时保留第一阶段全部读数;否则保留 Z-score <= K 的读数。
  • 本题只执行一次两阶段清洗,不迭代重算。

样例

输入样例 1

6
0 10 1.0
1 2 100 -1 3 4

输出样例 1

2
2 5

输入样例 2

4
0 10 2.0
5 5 5 5

输出样例 2

4
1 2 3 4

样例解释

样例覆盖缺失值、量程越界、标准差为 0、Z-score 等于阈值和 m=0。