一.题目
1.输入描述:
2.输出描述:
对每一个测试用例,输出特征运动的长度作为一行
输入例子1:
输出例子1:
3
例子说明1:
特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3
二.题解
1.题解思路:
- 申请两个
map<pair<int,int>,int>
格式的容器,分别用来装已录入帧的各特征出现次数(固定容器)、当前帧的各特征出现次数(临时容器); - 若新输入的特征在已录入容器中存在,则将其次数+1存在临时容器中;
- 每录完一帧后,将临时容器中的数据复制到固定容器中;
- 返回容器中最大次数;
2.题解代码:
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main(){
int n, m;
cin >> n;
int mm;
pair<int, int> xy; //定义特征变量
while (n--){
cin >> m; //输入帧数
int ans = 0;
map<pair<int, int>, int> preFeaTimes; //用来储存已输入帧的特征出现次数
map<pair<int, int>, int> feaTimes; //用来储存包含已输入和当前帧的特征出现次数
while (m--){
cin >> mm;
for (int i = 0; i < mm; i++){
cin >> xy.first >> xy.second;
if (preFeaTimes.count(xy))
feaTimes[xy] = preFeaTimes[xy] + 1;
else
feaTimes[xy] = 1;
if (feaTimes[xy] > ans)
ans = feaTimes[xy];
}
preFeaTimes.clear();
preFeaTimes.swap(feaTimes); //将最新的次数放入存放已输入的容器中
}
cout << ans << endl;
}
return 0;
}