0
点赞
收藏
分享

微信扫一扫

AcWing 1913. 公平摄影

在这里插入图片描述

思路:寻找区间内只有1种奶牛或者2种奶牛数量相等的最长区间,将两种奶奶记作1,-1数量相等则区间和为0

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>

#define x first
#define y second

using namespace std;
const int N = 100010;
typedef pair<int, int> PII;

PII q[N];

int main()
{
    int n;
    scanf("%d", &n);
    for(int i=1;i<=n;i++){
        int x;
        char str[2];
        scanf("%d%s", &x, str);
        
        if(*str=='G') q[i]={x,1};
        else q[i]={x,-1};
        
    }
    
    sort(q+1,q+1+n);
    unordered_map<int,int> hash;
    int res=0,sum=0,last;
    for(int i=1;i<=n;i++){
        if(!hash.count(sum)) hash[sum]=q[i].x;
        sum+=q[i].y;
        if(hash.count(sum)) res=max(res,q[i].x-hash[sum]);
        
        if(i==1||q[i].y!=q[i-1].y) last=q[i].x;
        res=max(res,q[i].x-last);
        
        
    }
    
    printf("%d",res);
    return 0;
}
举报

相关推荐

0 条评论