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] << "\n";
                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] << "\n";
                return 0;
            }
            sum += mp[b[i]];
        }
    }
    return 0;
}

原文链接: https://www.cnblogs.com/lifehappiness/p/12826051.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    Find Pair

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/346261

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午3:46
下一篇 2023年3月2日 上午3:48

相关推荐