• 【题解】【CF670C】cinema


    毫无意义题解系列

    Description(中文翻译)

    莫斯科正在举办一个大型国际会议,有n个来自不同国家的科学家参会。 每个科学家都只懂得一种语言。 为了方便起见,我们把世界上的所有语言用1到10^9之间的整数编号。 在会议结束后,所有的科学家决定一起去看场电影放松一下。 他们去的电影院里一共有m部电影正在上映,每部电影的语音和字幕都采用不同的语言。 对于观影的科学家来说,如果能听懂电影的语音,他就会很开心;如果能看懂字幕,他就会比较开心;如果全都不懂,他就会不开心。 现在科学家们决定大家看同一场电影。 请你帮忙选择一部电影,可以让观影很开心的人最多。 如果有多部电影满足条件,则在这些电影中挑选观影比较开心的人最多的那一部。

    sol

    简单离散化

    为了偷懒使用map

    时间复杂度(O(nlogm))

    (注意:以下是排序代码,会非常愉快的T掉第125个点)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    using namespace std;
    
    const int N=200010;
    
    inline void read(int &x) {
        x=0;
        int f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {
            if (ch=='-') {
                f=-1;
            }
            ch=getchar();
        }
        while(ch>='0'&&ch<='9') {
            x=x*10+ch-'0';
            ch=getchar();
        }
        x*=f;
    }
    
    struct note {
        int x;
        int y;
        int id;
    };
    
    int n,m;
    int a[N];
    note da[N];
    map<int,int> mp;
    
    inline bool comp(const note &x,const note &y) {
        int p1=mp[x.x],p2=mp[y.x];
        int u1=mp[x.y],u2=mp[y.y];
        return p1==p2?(u1==u2?x.id>y.id:u1>u2):p1>p2;
    }
    
    int main() {
        read(n);
        for(int i=1;i<=n;i++) {
            read(a[i]);
            mp[a[i]]++;
        }
        read(m);
        for(int i=1;i<=m;i++) {
            read(da[i].x);
        }
        for(int i=1;i<=m;i++) {
            read(da[i].y);
            da[i].id=i;
        }
        sort(da+1,da+m+1,comp);
        printf("%d
    ",da[1].id);
        return 0;
    }
    

    调了1min的代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    using namespace std;
    
    const int N=200010;
    
    inline void read(int &x) {
        x=0;
        int f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {
            if (ch=='-') {
                f=-1;
            }
            ch=getchar();
        }
        while(ch>='0'&&ch<='9') {
            x=x*10+ch-'0';
            ch=getchar();
        }
        x*=f;
    }
    
    struct note {
        int x;
        int y;
        int id;
    };
    
    int n,m;
    int a[N];
    note da[N];
    map<int,int> mp;
    
    inline bool comp(const note &x,const note &y) {
        int p1=mp[x.x],p2=mp[y.x];
        int u1=mp[x.y],u2=mp[y.y];
        return p1==p2?(u1==u2?x.id>y.id:u1>u2):p1>p2;
    }
    
    int main() {
        read(n);
        for(int i=1;i<=n;i++) {
            read(a[i]);
            mp[a[i]]++;
        }
        read(m);
        for(int i=1;i<=m;i++) {
            read(da[i].x);
        }
        for(int i=1;i<=m;i++) {
            read(da[i].y);
            da[i].id=i;
        }
        note ans=da[1];
        for(int i=2;i<=m;i++) {
            if (!comp(ans,da[i])) {
                ans=da[i];
            }
        }
        printf("%d
    ",ans.id);
        return 0;
    }
    
  • 相关阅读:
    音箱摆放
    SQL Server数据库开发的二十一条军规
    一年级程序员读《应用框架的设计与实现--.NET平台》
    JavaScript调用现成Word模板完成打印
    Asp.net下C#调用Word模版实例
    Android线程池
    Windows系统编程之异步I/O和完成端口 [北极星2003 看雪论坛]
    [转]异步IO、APC、IO完成端口、线程池与高性能服务器
    [转]Windows 内核(WRK)简介
    [转]IOCPSocket IO模型终结篇
  • 原文地址:https://www.cnblogs.com/tt66ea-blog/p/11822721.html
Copyright © 2020-2023  润新知