zoukankan      html  css  js  c++  java
  • 排序之离散化

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<vector> 
    const int maxn =10000;
    using namespace std;
    int s[maxn];
    int n;
    vector<int>v;
    int query(int x)
    {
        return lower_bound(v.begin(),v.end(),x) - v.begin() +1; 
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;++i)
        {
            cin>>s[i];
            v.push_back(s[i]);
        }
        stable_sort(v.begin(),v.end());
        v.erase(unique(v.begin(),v.end()),v.end());
        for(int i=0;i<v.size();i++)
            cout<<v[i]<<' ';
        puts("");
        for(int i=1;i<=n;++i)
        {
            cout<<query(s[i])<<' ';
        }
        return 0;
    }

     例题:Cinema

    题意翻译

    莫斯科在举办一场重要的有n 个不同国家的珂学家参与的国际会议,每个珂学家都只会一种语言。为了方便起见,我们规定一种语言用110^9 的数来描述。 在会议之后的晚上,珂学家们决定去看电影。他们去的电影院有m场电影,每场有两个不同的数字,分别代表配音的语言和字幕的语言。如果一个珂学家能听懂配音,他会非常愉悦;如果能看懂字幕,他会比较满意。如果既看不懂也听不懂,他会很生气。 珂学家们决定去看同一场电影,你必须帮助他们选择一场电影,让愉悦的人最多的前提下,比较满意的人最多。 输入格式: 第一行一个整数n(1n200000) 表示珂学家个数。 第二行n个整数a1, a2, ..., an(1ai109) 表示珂学家们会的语言。 第三行一个整数 m 1m200000 表示电影的场数。 第四行m个整数b1, b2, ..., bn(1bj109) 表示电影的配音用的语言。 第五行m 个整数c1, c2, ..., cn (1cj109) 表示电影的字幕用的语言。 输出格式: 一个整数表示安排哪一场电影。 如果有多种情况,选择比较满意的方案输出。

    Examples

    Input
    3
    2 3 2
    2
    3 2
    2 3
    Output
    2
    Input
    6
    6 3 1 1 3 7
    5
    1 2 3 4 5
    2 3 4 5 1
    Output
    1
    #include<bits/stdc++.h>
    using namespace std;
    int num,n,m,a[600050],b[600050];
    int sci[200010],A[200010],S[200010];
    int cnt=0;
    //最常见的离散化操作:
    void lisan() { sort(a+1,a+cnt+1); for(int i=1;i<=cnt;++i) { if(i==1||a[i]!=a[i-1]) b[++num]=a[i]; } } int query(int x) { return lower_bound(b+1,b+num+1,x) - b; } int p[600050]; int main() { cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&sci[i]); a[++cnt]=sci[i]; } cin>>m; for(int i=1;i<=m;i++) { scanf("%d",&A[i]); a[++cnt]=A[i]; } for(int i=1;i<=m;i++) { scanf("%d",&S[i]); a[++cnt]=S[i]; } lisan(); for(int i=1;i<=n;i++) { p[query(sci[i])]++; } int maxs=-1,ans=1,max2=-1; for(int i=1;i<=m;++i) { if(p[query(A[i])]>maxs)ans=i,maxs=p[query(A[i])],max2=p[query(S[i])]; else if(p[query(A[i])]==maxs&&p[query(S[i])]>max2) { ans=i,max2=p[query(S[i])]; } } printf("%d",ans); }
  • 相关阅读:
    归并排序(非递归)
    centos7.2 安装jenkins2.274
    归并排序
    Jmeter5.4支持TPS测试
    centos下安装rocketmq4.6.1
    Java 8新特性:lambda表达式
    tomcat putty启动
    Linux启动tomcat带控制台
    每个Java开发者都应该知道的5个JDK工具
    强大易用的日期和时间库 线程安全 Joda Time
  • 原文地址:https://www.cnblogs.com/719666a/p/10162608.html
Copyright © 2011-2022 走看看