0
点赞
收藏
分享

微信扫一扫

1913. 公平摄影(AcWing)

何以至千里 2022-01-20 阅读 20

题目链接:

题意:

思路:

代码:

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
const int N = 1e5 + 10;
typedef pair<int, int> PII;
PII a[N];
int s[N];
unordered_map<int, int> pos;
int main()
{
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
    {
        int x;
        char b;
        scanf("%d %c", &x, &b);
        a[i].x = x;
        if(b == 'G')     a[i].y = 1;
        else    a[i].y = -1;
    }
    sort(a + 1, a + n + 1);
    pos[0] = a[1].x;
    int ans = 0, last = 0;
    //初始化,第一个肯定是可以自己独占一张照片的
    s[0] = a[1].y;
    for(int i = 1; i <= n; i++)
    {
        //用来记录当前这个是G还是H
        s[i] = a[i].y;
        //如果全是一种牛的情况
        if(s[i] != s[i - 1])
        {
            last = a[i].x;
        }
        ans = max(ans, a[i].x - last);
        //两种牛都有的情况下
        a[i].y += a[i - 1].y;
        int x = a[i].y, d = a[i].x;
        if(pos.count(x))    ans = max(ans, d - pos[x]);
        else    if(i < n)   pos[x] = a[i + 1].x;
    }
    printf("%d\n", ans);
    return 0;
}
举报

相关推荐

0 条评论