zoukankan      html  css  js  c++  java
  • Find Pair

    Find Pair

    思路

    排一下序然后枚举计数就行了,不是挺简单的嘛。

    这是我以为能过的代码,没想到(Wrong answer on test 3),还是只能过样例。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e5 + 10;
    int a[N];
    int main() {
        // freopen("in.txt", "r", stdin);
        ios::sync_with_stdio(false);
        int n;
        ll m;
        cin >> n >> m;
        for(int i = 1; i <= n; i++)
            cin >> a[i];
        sort(a + 1, a + 1 + n);
        ll sum = 0;
        for(int i = 1; i <= n; i++) {
            if(sum + n < m) {
                sum += n;
                continue;
            }
            for(int j = 1; j <= n; j++) {
                sum++;
                if(sum == m) {
                    cout << a[i] << " " << a[j] << "
    ";
                    return 0;
                }
            }
        }
        return 0;
    }
    

    我们举个简单的例子(1 1 2),如果按照上面的枚举顺序应该是

    ([1,1][1,1][1,2][1,1][1,1][1,2][1,2][1,2][2,3])

    但是真实却是

    ([1,1][1,1][1,1][1,1][1,2][1,2][1,2][1,2][2,2])

    相比应该看出哪里不一样了吧,数组中1连续出现,我们枚举的数对也会连续出现。所以我们改进的办法就是加一个map来计数,这样就可以按照题目要求的顺序得到递增的序列了。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int N = 1e5 + 10;
    
    int a[N], n, b[N], m;
    ll k;
    map<int, int> mp;
    
    int main() {
        // freopen("in.txt", "r", stdin);
        ios::sync_with_stdio(false);
        cin >> n >> k;
        m = n;
        for(int i = 1; i <= n; i++) {
            cin >> a[i];
            b[i] = a[i];
            mp[a[i]]++;
        }
        sort(a + 1, a + 1 + n);
        sort(b + 1, b + 1 + m);
        m = unique(b + 1, b + m + 1) - (b + 1);
        ll sum = 0;
        for(int i = 1; i <= m; i++) {
            if(sum + (ll)n * mp[b[i]] < k) {
                sum += (ll)n * mp[b[i]];
                continue;
            }
            for(int j = 1; j <= n; j++) {
                if(k > sum && k <= sum + mp[b[i]]) {
                    cout << b[i] << " " << a[j] << "
    ";
                    return 0;
                }
                sum += mp[b[i]];
            }
        }
        return 0;
    }
    
  • 相关阅读:
    react 把时间戳用new Date改为日期
    react-格式化日期
    react-2种方法写法
    React-router4简约教程
    react-addons-css-transition-group
    vue-一些易错点
    Js apply方法详解,及其apply()方法的妙用
    C++中的继承(3)作用域与重定义,赋值兼容规则
    C++中的继承(1) 继承方式
    vim中文帮助文档安装
  • 原文地址:https://www.cnblogs.com/lifehappiness/p/12826051.html
Copyright © 2011-2022 走看看