zoukankan      html  css  js  c++  java
  • 题解 CF670C 【Cinema】

    • 题目链接:

      https://www.luogu.org/problemnew/show/CF670C

    • 思路:

      • step-1:

        语言的数据范围是10^9,所以我们采取用map离散化,这样就能方便且不MLE地记录每个语言会的人数。

      • step-2:

        然后我们再遍历一遍所有场次的电影,记录下最多人能听懂声音的那一场,放在一个ok数组里。

        接着再遍历ok数组,记录最多人能看懂字幕的那一场就是答案。

    • Tips:

      • step-2能用sort代替,但实测这样会过不了第125个点,因为那个点数据比较毒瘤。下面的代码也给出了sort的cmp函数。
      • mx(最大值)要设成小于0的数,多亏了样例2,因为样例2中第一场电影的字幕没有一个人懂。
    • 代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <map>
    #include <cstring>
    #include <algorithm>
    #include <cctype>
    using namespace std;
    const int maxn=200005;
    map <int,int> lan;
    struct Film{
        int voi,tit,index;
    }film[maxn];
    int n,m;
    template <class T>inline void read(T &x)
    {
        x=0;char c;int ne=0;
        while(!isdigit(c=getchar()))ne=c=='-';
        x=c-48;
        while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
        x=ne?-x:x;
    }
    inline bool cmp(const Film &x,const Film &y)
    {
        if(lan[x.voi]==lan[y.voi])
        {
            return lan[x.tit]>lan[y.tit];
        }
        return lan[x.voi]>lan[y.voi];
    }
    int main()
    {
        int x,mx=-1;
        scanf("%d",&n);
        for(register int i=1;i<=n;i++){
            read(x);
            lan[x]++;
        }
        scanf("%d",&m);
        for(register int i=1;i<=m;i++){
            read(film[i].voi);
            film[i].index=i;
        }
        for(register int i=1;i<=m;i++){
            read(film[i].tit);
        }
        //sort(film+1,film+1+m,cmp);
        int ok[maxn],cnt=0,ans;  //step-2
        for(register int i=1;i<=m;i++){
            if(lan[film[i].voi]>mx){
                cnt=0,mx=lan[film[i].voi];
                ok[++cnt]=i;
            }
            else if(lan[film[i].voi]==mx){
                ok[++cnt]=i;
            }
        }mx=-1;
        for(register int i=1;i<=cnt;i++){
            if(lan[film[ok[i]].tit]>mx){
                mx=lan[film[ok[i]].tit];ans=ok[i];
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    
  • 相关阅读:
    MySql的性能优化
    MySql的备份还原
    MySql的数据目录
    MySql的事务
    MySql的视图
    算法笔记_006:全源最短路径问题【动态规划法】
    算法笔记_005:堆排序问题【变治法】
    算法笔记_004:8枚硬币问题【减治法】
    算法笔记_003:矩阵相乘问题【分治法】
    使用MongoDB和JSP实现一个简单的购物车系统
  • 原文地址:https://www.cnblogs.com/Rye-Catcher/p/8631459.html
Copyright © 2011-2022 走看看