Cinema

2023-12-19 00:37:50

title: Cinema
date: 2023-12-18 21:05:20
tags: 离散化
categories: 算法进阶指南

题目大意

在这里插入图片描述

解题思路

m m m 部电影和 n n n 个人最多涉及的 2 ? m + n 2 * m + n 2?m+n 种语言放进一个数组,排序离散化,然后用这个 [ 1 , 2 ? m + n ] [1,2 * m + n] [1,2?m+n] 范围内大小的整数代替每一个语言,此时我们就可以用数组直接统计每一种语言的人的数量,进而循环找出符合题意的序号电影

实现代码

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;

const int N = 2e6 + 10, mod = 1e9 + 7;

int cnt[N];

int main()
{
    int n; cin >> n;
    vector<int> d;
    vector<int> a(n);
    for(int i = 0 ; i < n;  i++){
        cin >> a[i];
        d.push_back(a[i]);
    }
    
    int m; cin >> m;
    vector<int> b(m);
    for(int i = 0 ; i < m; i ++){
        cin >> b[i];
        d.push_back(b[i]);
    }
    vector<int> c(m);
    for(int i = 0; i < m; i ++){
        cin >> c[i];
        d.push_back(c[i]);
    }
    sort(d.begin(),d.end());
    d.erase(unique(d.begin(),d.end()),d.end());
    ll ans = 0;
    for(int i = 0; i < n; i ++){
        a[i] = lower_bound(d.begin(),d.end(),a[i]) - d.begin();
    }
    for(int i = 0 ; i < m; i ++){
        b[i] = lower_bound(d.begin(),d.end(),b[i]) - d.begin();
        c[i] = lower_bound(d.begin(),d.end(),c[i]) - d.begin();
    }
    
    for(int i = 0 ; i < n; i ++){
        cnt[a[i]]++;
    }
    
    int x;
    int max1 = -1,max2 = -1;
    for(int i = 0 ; i < m; i ++){
        if(max1 < cnt[b[i]]){
            max1 = cnt[b[i]];
            max2 = cnt[c[i]];
            x = i + 1;
        }
        else if(cnt[b[i]] == max1 && cnt[c[i]] > max2){
            max2 = cnt[c[i]];
            x = i + 1;
        }
    }
    cout << x;
    return 0;
}

文章来源:https://blog.csdn.net/m0_73865722/article/details/135071880
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。