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; }