【计蒜客】2018ICPC徐州赛区网络赛F Features Track(map的使用)

本文介绍了一种解决最大连续出现点集次数的问题算法。利用map存储每轮中点集出现的状态,通过判断前一轮是否出现过该点来确定当前轮次的点集是否连续出现,并记录最大连续出现次数。

题目链接

 

【题意】

其实很简单,给n组数据每组数据里有k个点集,求最大连续出现的点的次数。

 

【解题思路】

啊昨天真是状态差到爆……这题居然都没写出来,可能是那道水题写崩了qaq

map里面套个pair表示一个点就好了,然后只要在上一轮没找到的点就记为0,能找到的点说明连续出现,即上一轮的答案再+1,每次再更新最大值即可。

 

【代码】

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
map<pair<int,int>,int>m[maxn];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,ans=0,k,x,y;
        scanf("%d",&n);
        for(int i=0;i<maxn;i++)
            m[i].clear();
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&k);
            while(k--)
            {
                scanf("%d%d",&x,&y);
                if(!m[i-1].count({x,y}))m[i][{x,y}]=1;
                else m[i][{x,y}]=m[i-1][{x,y}]+1;
                ans=max(ans,m[i][{x,y}]);
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值