题目描述

https://www.nowcoder.com/practice/5afcf93c419a4aa793e9b325d01957e2

题解

模拟,遍历帧。以 特征向量 为 key,起始帧和当前连续帧数 为 value
在每一帧,如果特征不存在,加入该特征,并设初值;如果该特征存在但不连续了,重置为初值;如果该特征存在且连续,更新当前的连续帧数。如果 起始帧 + 当前连续帧数 = 当前帧,说明当前帧使特征连续,同时检查更新最大连续帧数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <map>
using namespace std;

int main() {
int n;
cin >> n;
while (n--) {
int m, max_continue = 1; // 最大连续帧
cin >> m;
// 特征向量、起始帧、当前连续帧数
map<pair<int, int>, pair<int, int>> mp;
for (int i = 0; i < m; i++) { // 遍历帧
int t, x, y;
cin >> t;
while (t--) {
cin >> x >> y;
pair<int, int> p(x, y);
// 如果特征已经存在,且当前帧使特征连续
if (mp.find(p) != mp.end() && mp[p].first + mp[p].second == i) {
mp[p].second++; // 连续帧 + 1
max_continue = max(max_continue, mp[p].second);
} else { // 特征不存在 或 当前帧未使特征连续
mp[p] = make_pair(i, 1);
}
}
}
cout << max_continue << endl;
}
return 0;
}