手写离散化不太行有大佬帮看看嘛
  • 板块CF670C Cinema
  • 楼主6lszxz
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/3/30 15:28
  • 上次更新2023/10/28 05:10:41
查看原帖
手写离散化不太行有大佬帮看看嘛
585201
6lszxz楼主2022/3/30 15:28
#include "cstdio"
#include "algorithm"

int a[200005],b[200005],c[200005];
//离散化之前的数组
int aa[200005],bb[200005],cc[200005];
//离散化之后的数组
int num[600005];
int laa=1,lbb=1,lcc=1;

int get(int x,int w){
    if(w==0){
        return std::lower_bound(aa+1,aa+laa+1,x)-aa;
    }
    if(w==1){
        return std::lower_bound(bb+1,bb+lbb+1,x)-bb;
    }
    if(w==2){
        return std::lower_bound(cc+1,cc+lcc+1,x)-cc;
    } else{
        return 0;
    }
}
//0代表a,1代表b,2代表c

int main(){
    int n,m;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    std::sort(a+1,a+n+1);
    aa[laa]=a[1];
    for(int i=2;i<=n;i++){
        if(a[i]!=a[i-1]){
            laa++;
            aa[laa]=a[i];
        }
    }
    for(int i=1;i<=n;i++){
        num[get(a[i],0)]++;
    }
    scanf("%d",&m);
    for(int i=1;i<=m;i++){
        scanf("%d",&b[i]);
    }
    std::sort(b+1,b+m+1);
    bb[lbb]=b[1];
    for(int i=2;i<=m;i++){
        if(b[i]!=b[i-1]){
            lbb++;
            bb[lbb]=b[i];
        }
    }
    for(int i=1;i<=m;i++){
        scanf("%d",&c[i]);
    }
    std::sort(c+1,c+m+1);
    cc[lcc]=c[1];
    for(int i=2;i<=m;i++){
        if(c[i]!=c[i-1]){
            lcc++;
            cc[lcc]=c[i];
        }
    }
    int max=1;
    for(int i=2;i<=m;i++){
        if(num[get(b[i],1)]>num[get(b[max],1)]){
            max=i;
        } else if(num[get(b[i],1)]==num[get(b[max],1)]){
            if(num[get(c[i],2)]>num[get(c[max],2)]){
                max=i;
            }
        }
    }
    printf("%d",max);
    return 0;
}

感觉思路上没问题哎呜呜

2022/3/30 15:28
加载中...