语言月赛 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;
}