C. Reorder the Array

题目链接

Codeforces Round #497 (Div. 2)--C. Reorder the Array

题解

中档题。题意大概是给定一组数字,求交换位置后使交换后比交换前的数字大的位置的最大数量。
排序一遍后直接诶从小开始处理依次找到比当前数字更大的且未被选中过的数。

代码

#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
int n, a[100005], r, ans;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++) {
        while (a[i] >= a[r])r++;
        if (r > n) {
            cout << ans;
            return 0;
        }
        ans++;
        r++;
    }
}

标签: sortings, math, two pointers, combinatorics

添加新评论