跳转至

语言月赛 202408 蓝色的网易云

题意

题目中有 $n$ 首歌曲,分成 $m$ 类,每类歌曲数量相同($n$ 是 $m$ 的倍数)。我们需要安排歌曲顺序,保证相邻歌曲题材不相同。


请确保已经学习过 vector,如没有点击上方 STL 容器进行学习

实现思路

找到一种方式使得相邻歌曲题材不同。可以把每个歌曲按照自己题材存储到对应的 vector 里。例如下方代码 a[x].push_back(i) 就成功的记录了题材为 $x$ 的歌曲它的编号是 $i$。

例如样例存储的如下所示

a[1] = {1, 2}
a[2] = {3, 4}
a[3] = {5, 6}

此时就按照列遍历,先遍历列,在遍历行。然后输出每一个位置的编号。这样肯定可以保证相邻两两歌曲的题材不同。

这个题用二维数组也可以实现,只是 vector 比较方便一些。

实现代码

#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> a[1005];// vector<int> a1, a2, a3, ……am;

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        // 在 x 这个 vector 里存位置 i
        a[x].push_back(i); 
    } 
    for (int j = 0; j < n / m; j++) // 先遍历列,注意 vector 下标从 0 开始
    {
        for (int i = 1; i <= m; i++)
        {
            cout << a[i][j] << "\n";
        }
    }
    return 0; 
}