题解 CF670C 【Cinema】
思路
离散化,枚举电影
关于离散化
\(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);
}