题解 CF670C 【Cinema】

luogu
CF

思路

离散化,枚举电影

关于离散化

\(unique\)
使用前需要对数组进行排序,功能是整理出重复元素
如:
1 1 1 2 3 4 4 5
\(unique\)一遍后,就会得到如下的数组:
1 2 3 4 5 1 1 4
需要注意的是\(unique\)返回的是第一个重复元素的位置
\(vector\)自带的\(erase\)函数去掉后面的即可

int query(int x)//找到离散化后的数
{
	return lower_bound(V.begin(),V.end(),x)-V.begin()+1;
}

代码

#include<bits/stdc++.h>
using namespace std;
vector<int>V;
int n,m;
int a[200010],b[200010],c[200010],language_tot[600030],max_sound=-1,max_sight=-1,ans;
int query(int x)
{
	return lower_bound(V.begin(),V.end(),x)-V.begin()+1;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		V.push_back(a[i]);
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&b[i]);
		V.push_back(b[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&c[i]);
		V.push_back(c[i]);
	}
	stable_sort(V.begin(),V.end());
	V.erase(unique(V.begin(),V.end()),V.end());
	for(int i=1;i<=n;i++)
	{
		language_tot[query(a[i])]++;
	}
	for(int i=1;i<=m;i++)
	{
		if(language_tot[query(b[i])]>max_sound)
		{
			max_sound=language_tot[query(b[i])];
			max_sight=language_tot[query(c[i])]; 
			ans=i;
		}
		else
		{
			if(language_tot[query(b[i])]==max_sound&&language_tot[query(c[i])]>max_sight)
			{
				max_sight=language_tot[query(c[i])];
				ans=i;
			}
		}
	}
	printf("%d",ans);
} 
posted @ 2019-07-15 09:13  G_A_TS  阅读(329)  评论(0编辑  收藏  举报