#P1492. Up and Down Sequences

Up and Down Sequences

题目描述

在某些计算(特别是模拟)中,使用的伪随机数生成器的质量是一个重要问题。提出的生成算法需要经过许多测试来评估其质量,或者更常见的是,评估其不足之处。其中一个常见的测试是游程检验

在该测试中,序列会被检测其上升游程下降游程

我们将检查数据值序列中的上升游程下降游程的数量及其长度。

  • 上升游程:只要接收到的数据值不小于前一个数据值,游程就继续。当接收到的数据值小于前一个数据值时,该游程终止。
  • 下降游程:只要接收到的数据值不大于前一个数据值,游程就继续。当接收到的数据值大于前一个数据值时,该游程终止。

一个上升游程可以由下降游程的终止而启动,反之亦然。(在这种情况下,新游程的初始长度为11。)

如果数据值的初始变化是上升的,则所有初始数据值都属于上升游程,并计入其长度。
如果数据值的初始变化是下降的,则所有初始数据值都属于下降游程,并计入其长度。
如果数据值无法归类为上升游程下降游程,则认为该数据既无上升游程也无下降游程。

对于数据文件中的每一行输入,计算其上升游程下降游程的平均长度,并在处理每一行时输出这些平均值。

输入格式

每个待分析的序列占据一行输入。

每个序列包含至少11个、至多3030无符号非零整数。每个整数的位数在1144位之间,整数之间用单个空格分隔。每个序列以单个数字00作为结束符,该00不视为序列的一部分。

所有序列的输入以单独一行的00作为结束标志,该00不视为序列,也不应产生任何输出。

输出格式

对于每个输入的序列,输出一行,包含两个实数:

  1. 首先输出消息 Nr values = N: ,其中NN是该行的输入数据个数(不包括终止符00)。
  2. 然后输出上升游程的平均长度下降游程的平均长度,用空格分隔。

所有数值需四舍五入到小数点后66位。

输入样例

1 2 3 0  
3 2 1 0  
1 2 3 2 1 0  
2 2 2 2 3 0  
4 4 4 4 3 0  
4 4 4 3 3 3 3 0  
4 4 4 3 3 3 4 0  
5 5 5 5 0  
1 2 3 2 3 4 5 0  
0  

输出样例

Nr values = 3:  2.000000 0.000000  
Nr values = 3:  0.000000 2.000000  
Nr values = 5:  2.000000 2.000000  
Nr values = 5:  4.000000 0.000000  
Nr values = 5:  0.000000 4.000000  
Nr values = 7:  0.000000 6.000000  
Nr values = 7:  1.000000 5.000000  
Nr values = 4:  0.000000 0.000000  
Nr values = 7:  2.500000 1.000000  

题目来源

19951995年北美中东部地区竞赛