C++解决《特征提取》问题(map、pair)

一.题目

在这里插入图片描述

1.输入描述:

在这里插入图片描述

2.输出描述:

对每一个测试用例,输出特征运动的长度作为一行

输入例子1:

在这里插入图片描述

输出例子1:

3

例子说明1:

特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3

二.题解

1.题解思路:

  1. 申请两个map<pair<int,int>,int>格式的容器,分别用来装已录入帧的各特征出现次数(固定容器)、当前帧的各特征出现次数(临时容器);
  2. 若新输入的特征在已录入容器中存在,则将其次数+1存在临时容器中;
  3. 每录完一帧后,将临时容器中的数据复制到固定容器中;
  4. 返回容器中最大次数;

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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuZuqiang_3027

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值