当前位置:网站首页>谎牛计数(春季每日一题 53)

谎牛计数(春季每日一题 53)

2022-07-07 14:28:00 sweetheart7-7

奶牛 Bessie 躲在数轴上的某处。

农夫约翰的 N N N 头奶牛中的每头奶牛都有一条信息要分享:第 i i i 头奶牛说 Bessie 躲在小于或等于 p i p_i pi 的某个位置,或者说 Bessie 躲在大于或等于 p i p_i pi 的某个位置。

不幸的是,可能不存在躲藏位置与所有奶牛的回答均一致,这意味着并非所有奶牛都在说真话。

计算在撒谎的奶牛的最小数量。

输入格式
输入的第一行包含 N N N

以下 N N N 行每行包含字符 LG,之后是一个整数 p i p_i piL 表示第 i i i 头奶牛说 Bessie 的躲藏位置小于或等于 p i p_i pi,而 G 表示第 i i i 头奶牛说 Bessie 的躲藏位置大于或等于 p i p_i pi

输出格式
输出在撒谎的奶牛的最小数量。

数据范围
1 ≤ N ≤ 1000 1≤N≤1000 1N1000,
0 ≤ p i ≤ 1 0 9 0≤pi≤10^9 0pi109

输入样例1:

2
G 3
L 5

输出样例1:

0

样例1解释
有可能没有奶牛在撒谎。

输入样例2:

2
G 3
L 2

输出样例2:

1

样例2解释
至少一头奶牛在撒谎。


// 枚举每一个端点,撒谎的牛的数量等于左边的 L 之和 + 右边的 G 之和
// Bessie 所在位置取端点中间和取端点对答案的影响是一样的
#include<iostream>
#include<algorithm>

#define x first
#define y second

using namespace std;

const int N = 1010;

int n;
pair<int, char> q[N];
int s[N];

int main(){
    
    
    cin >> n;
    
    for(int i = 1; i <= n; i++) cin >> q[i].y >> q[i].x;
    
    sort(q + 1, q + 1 + n);
    
    for(int i = 1; i <= n; i++){
    
        s[i] = s[i - 1];
        if(q[i].y == 'L') s[i]++;
    }
    
    
    
    int res = n;
    for(int i = n, r = 0; i; i--){
    
        
        int j = i, t = 0;
        while(j && q[j].x == q[i].x){
    
            if(q[j].y == 'G') t++;
            j--;
        }
        
        res = min(res, s[j] + r);
        r += t;
        i = j + 1;
    }
    
    cout << res << endl;
    
    return 0;
}
原网站

版权声明
本文为[sweetheart7-7]所创,转载请带上原文链接,感谢
https://whb888.blog.csdn.net/article/details/125632035