zoukankan      html  css  js  c++  java
  • 【解题报告】 CF67C Cinema

    【解题报告】 CF67C Cinema

    题目:https://www.acwing.com/problem/content/105/

    解题思路:

    排序+离散化

    m部电影和n个人涉及2×m+n种语言。建立一个数组排序再离散化一下,用1到2×m+1之间的数来算。然后就暴力统计一下,就可以得出答案

    AC代码

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <set>
    using namespace std;
    const int maxn=5*10e5;
    int n,m;
    int a[maxn];
    int p[maxn];
    int w[maxn];
    int s[maxn];
    int q[maxn];
    int k[maxn];
    int ans1,ans2;
    int ans=1;
    void disc(int x)//离散化
    {
    	int c;
    	sort(p+1,p+x+1);
    	for(int i=1;i<=x;i++)
    	{
    		if(i==1||p[i]!=p[i-1])
    		q[++c]=p[i];
    	}
    	q[0]=c;
    }
    int query(int x)//离散化的二分查询
    {
    	int l=1,r=q[0],mid;
    	while(l<r)
    	{
    		mid=(l+r)>>1;
    		if(q[mid]>=x)
    		r=mid;
    		else
    		l=mid+1;
    	}
    	return l;
    }
    int main()
    {
    	int c=0;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		p[++c]=a[i];
    	}
    	cin>>m;
    	for(int i=1;i<=m;i++)
    	{
    		cin>>w[i];
    		p[++c]=w[i];
    	}
    	for(int i=1;i<=m;i++)
    	{
    		cin>>s[i];
    		p[++c]=s[i];
    	}
    	disc(c);
    	for(int i=1;i<=n;i++)
    	k[query(a[i])]++;//暴力统计
    	for(int i=1;i<=m;i++)
    	{
    		int x=k[query(w[i])];
    		int y=k[query(s[i])];
    		if(x>ans1||(x==ans1&&y>ans2))
    		{
    			ans=i;
    			ans1=x;
    			ans2=y;
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    URAL 1018 Binary Apple Tree
    URAL 1029 Ministry
    URAL 1039 Anniversary Party
    URAL 1078 Segments
    Codeforces 918D
    Codeforces 918C
    URAL 1495 One-two, One-two 2
    URAL 1244 Gentlemen
    URAL 1658 Sum of Digits
    URAL 1081 Binary Lexicographic Sequence
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/11312658.html
Copyright © 2011-2022 走看看