离散化

670C - Cinema
map就行 只是练练

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
using namespace std ;

const int N = 1000010 ;

struct mov {
	int voc, sub ;
} b[N] ;
int tot[N] ;

int n, m ;
int a[N] ;
vector <int> All ; 
map <int, int> ref ;

void discrete() {
	sort(All.begin(), All.end()) ;
	int cnt = 0 ;
	for (int i = 0; i < All.size(); i++) {
		if (i == 0 || All[i] != All[i - 1]) {	
			ref[All[i]] = ++cnt ;
		}
	}
}

int ansa = 0, ansb = 0, ansid = 1 ;

int main() {
	scanf("%d", &n) ;
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]) ;
		All.push_back(a[i]) ;
	}
	scanf("%d", &m) ;
	for (int i = 1; i <= m; i++) {
		scanf("%d", &b[i].voc) ;
		All.push_back(b[i].voc) ;
	}
	for (int i = 1; i <= m; i++) {
		scanf("%d", &b[i].sub) ;
		All.push_back(b[i].sub) ;
	}
	discrete() ;
	for (int i = 1; i <= n; i++) tot[ref[a[i]]]++ ;
	for (int i = 1; i <= m; i++) {
		int A = tot[ref[b[i].voc]], B = tot[ref[b[i].sub]] ;
		if (A > ansa) {
			ansa = A; ansb = B; ansid = i ;
		} else if (A == ansa && B > ansb) {
			ansb = B ; ansid = i ;
		}
	}
	printf("%d\n", ansid) ;
}

posted @ 2023-08-07 17:46  哈奇莱特  阅读(19)  评论(0)    收藏  举报