QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 1024 MB 總分: 100

#1964. 股票价格预测

统计

金先生是一位股票市场分析师。最近,他在查看几家公司的股票走势图时发现了一些有趣的现象。大多数连续四天上涨的股票在第五天都会下跌。此外,第五天下跌的股票价格通常位于这四天上涨期间第二天和第三天的价格之间。例如,A 公司的股票价格连续四天分别为 500 韩元、560 韩元、600 韩元和 680 韩元,而 A 公司第五天的股价为 580 韩元。同样,B 公司的股票价格连续四天分别为 1,000 韩元、1,200 韩元、1,400 韩元和 1,700 韩元,而 B 公司第五天的股价为 1,350 韩元。

金先生认为,如果他能在之前的股价序列中找到与过去几天价格变动模式相匹配的部分,就能相当准确地预测第二天的股价。他还认为,股价序列中的相对排名比实际价格更重要,因为如果两个股价序列的相对排名相同,它们在图表上的形态看起来就很相似。在上面的例子中,A 公司连续五天的股价序列 500、560、600、680、580 可以表示为 $(1, 2, 4, 5, 3)$,因为 500 是这五个数中最小的,550 是第二小的,600 是第四小的,以此类推。同样,B 公司连续五天的股价 1,000、1,200、1,400、1,700、1,350 出于同样的原因也可以表示为 $(1, 2, 4, 5, 3)$。它们的相对排名相同,且如图 K.1 所示,它们连续五天的走势图看起来非常相似。

图 K.1 A 公司和 B 公司连续五天的走势图

金先生决定,如果两个序列在相同位置的所有相对排名都相同,则认为这两个序列匹配。金先生正式定义了两个等长(整数个数相同)序列的 R-match 如下:两个长度相同的整数序列 $x = (x_1, \dots, x_m)$ 和 $y = (y_1, \dots, y_m)$ 是 R-match,当且仅当对于每个 $i$ ($1 \le i \le m$),$x_i$ 在 $x$ 中的排名与 $y_i$ 在 $y$ 中的排名相同。接下来,他定义了 R-模式匹配问题如下:给定长度为 $m$ 的整数序列 $x$ 和长度为 $n$ 的整数序列 $y$ ($m \le n$),找出 $y$ 中所有满足 $x$ 和 $(y_i, \dots, y_{i+m-1})$ 为 R-match 的位置 $i$。例如,当 $x = (33, 40, 22, 40, 41, 28)$ 且 $y = (10, 20, 16, 27, 32, 12, 32, 33, 20, 25, 15, 25, 31, 17)$ 时,$x$ 和 $(y_4, \dots, y_9)$ 是 R-match。此外,$x$ 和 $(y_9, \dots, y_{14})$ 也是 R-match。

给定长度为 $m$ 的整数序列 $x$ 和长度为 $n$ 的整数序列 $y$ ($m \le n$),编写一个程序来解决 $x$ 和 $y$ 的 R-模式匹配问题。

输入格式

程序从标准输入读取数据。输入的第一行包含两个整数 $m$ 和 $n$ ($1 \le m \le 10,000, 1 \le n \le 1,000,000, m \le n$),其中 $m$ 是 $x$ 的长度,$n$ 是 $y$ 的长度。第二行依次给出 $x$ 中的 $m$ 个整数。第三行依次给出 $y$ 中的 $n$ 个整数。$x$ 和 $y$ 中的每个整数范围在 $1$ 到 $10^9$ 之间。

输出格式

程序将结果写入标准输出。仅打印一行。该行应包含 $y$ 中所有满足 $x$ 和 $(y_i, \dots, y_{i+m-1})$ 为 R-match 的位置 $i$。每个位置必须按递增顺序排列。如果没有这样的位置,则打印 0。

样例

样例输入 1

5 12 
500 560 600 680 580
30 25 40 60 70 90 65 30 35 50 55 40

样例输出 1

3 8

样例输入 2

5 15
1000 1200 1400 1700 1350
1 2 3 4 5 6 7 8 7 6 5 4 3 2 1

样例输出 2

0

样例输入 3

6 14 
33 40 22 40 41 28
10 20 16 27 32 12 32 33 20 25 15 25 31 17

样例输出 3

4 9

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.