zoukankan      html  css  js  c++  java
  • ACM-ICPC 2018 徐州赛区网络预赛 F Features Track(STL模拟)

    https://nanti.jisuanke.com/t/31458

    题意

    有N个帧,每帧有K个动作特征,每个特征用一个向量表示(x,y)。两个特征相同当且仅当他们在不同的帧中出现且向量的两个分量分别相等。求最多连续相同特征的个数?

    分析

    用一个map来维护帧中特征的信息,map中的键即读入的向量,因此用一个pair<int , int>表示。

    键的值也是一个pair,需要记录它当前已经连续了多少次,还需要记录它上一次出现的帧的位置。如果它上一帧没有出现过,那么它的连续次数就要被置成1;如果上次出现了,则继续累加。用ans维护某个键最大连续出现次数。

    map[ pair(x,y)].first为该特征(x.y)连续次数  

    map[ pair(x,y)].second为该特征上一次出现的帧序号,用于下一次判断连续性

    #include<bits/stdc++.h>
    using namespace std;
     
    #define e exp(1)
    #define pi acos(-1)
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define ll long long
    #define ull unsigned long long
    #define mem(a,b) memset(a,b,sizeof(a))
    int gcd(int a,int b){return b?gcd(b,a%b):a;}
     
    typedef pair<int,int> pii;
    map<pii,pii> mp;
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            int n;scanf("%d",&n);
            int ans=-1;
            for(int i=1; i<=n; i++)
            {
                int k;scanf("%d",&k);
                for(int j=1; j<=k; j++)
                {
                    int x,y;scanf("%d%d",&x,&y);
                    if(mp[pii(x,y)].second==i-1)
                        mp[ pii(x,y) ].first++;
                    else if(mp[pii(x,y)].second==i)
                        continue;
                    else mp[ pii(x,y) ].first = 1;
                    
                    ans=max(ans,mp[pii(x,y)].first);
                    mp[pii(x,y)].second=i;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    hashlib加密算法
    gc 模块常用函数
    functools函数中的partial函数及wraps函数
    ctime使用及datetime简单使用
    __new__方法理解
    __getattribute__小例子
    == 和 is 的区别
    线程_可能发生的问题
    线程_进程池
    【网站】 简单通用微信QQ跳转浏览器打开代码
  • 原文地址:https://www.cnblogs.com/fht-litost/p/9668557.html
Copyright © 2011-2022 走看看