#11673. 珅泽教育CSP-J第一轮模拟考第十六套 第 36 题

珅泽教育CSP-J第一轮模拟考第十六套 第 36 题

三、完善程序(单选题,每小题3分,共计30分)

第1题

给定 nn 个整数 a1,a2,ldots,ana_1,a_2,ldots,a_n,每个数字都是 0,1,20,1,2 中的一个。可以不断交换这个序列中的任意两个数字,目标是让这个序列成为升序,请问最少需要几次交换?

#include<iostream>
int a[1000005], c[3] = {0}, q[3][3] = {0}, sum;
void cal(int u, int v)
{
    int pair = std::min(____(1)____);
    sum += pair;
    q[u][v] -= pair;
    q[v][u] -= pair;
}
int main()
{
    int n;
    std::cin >> n;
    for (int i = 0; i < n; ++i) {
        std::cin >> a[i];
        ____(2)____;
    }
    for (int i = 0; i < n; ++i) {
        int from = ____(3)____;
        int to = 0;
        if (i >= c[0]) to++;
        ____(4)____ to++;
        q[from][to]++;
    }
    cal(0, 1);
    cal(0, 2);
    cal(1, 2);
    sum += 2 * (____(5)____);
    std::cout << sum << "\n";
}

(1)处应填( )。

{{ select(1) }}

  • a[u], a[v]
  • c[u], c[v]
  • q[0][v], q[0][u]
  • q[u][v], q[v][u]