Codeforces 670C Cinema - 离散化

传送门

思路:将所有出现过的语言(语音、字幕、人们知道的)离散化一下,然后模拟即可。

AC Code:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=200000+100;
struct node{
    int yuyin;
    int zimu;
}mov[N];
int a[N<<2],b[N],sum,tot;//a[]=出现的数字 b[]=离散化数组 
void discrete(){
    sort(a+1,a+sum+1);
    for(int i=1;i<=sum;i++)
        if(i==1||a[i]!=a[i-1])
            b[++tot]=a[i];
}
int query(int x){
    return lower_bound(b+1,b+tot+1,x)-b;
}
int yuyan[N];
int cnt[N<<2];
int main(){
    int n,m;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&yuyan[i]);
        a[++sum]=yuyan[i];//人会的语言有可能不出现在m个电影中 
    }
    scanf("%d",&m);
    for(int i=1;i<=m;i++){
        scanf("%d",&mov[i].yuyin);
        a[++sum]=mov[i].yuyin;
    }
    for(int i=1;i<=m;i++){
        scanf("%d",&mov[i].zimu);
        a[++sum]=mov[i].zimu;
    }
    discrete();
    for(int i=1;i<=n;i++){
        cnt[query(yuyan[i])]++;
    }
    int ans,vhp=-(1<<30),hp=-(1<<30);//vhp=最大很高兴的人数 hp=最大比较高兴的人数 
    for(int i=1;i<=m;i++){
        if(cnt[query(mov[i].yuyin)]>vhp){
            vhp=cnt[query(mov[i].yuyin)];
            ans=i;
            hp=cnt[query(mov[i].zimu)];
        }
        if(vhp==cnt[query(mov[i].yuyin)]&&cnt[query(mov[i].zimu)]>hp){
            vhp=cnt[query(mov[i].yuyin)];
            ans=i;
            hp=cnt[query(mov[i].zimu)];
        }
    }
    printf("%d",ans);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Loi-Brilliant/p/9425356.html