Cinema


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

题目大意

在这里插入图片描述

解题思路

m m m 部电影和 n n n 个人最多涉及的 2 ∗ m + n 2 * m + n 2m+n 种语言放进一个数组,排序离散化,然后用这个 [ 1 , 2 ∗ m + n ] [1,2 * m + n] [1,2m+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;
}
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值