本文主要是介绍儿童节礼物-你能满足孩子们吗,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目如下:
儿童节到了,幼儿园里有N个小朋友,每个小朋友都希望得到一份礼物。幼儿园的老师准备了M份不同的礼物,每份礼物都有一个编号,从1到M。老师希望每个小朋友都能得到一份礼物,但是每个小朋友对礼物的喜好不同,老师希望尽可能地满足小朋友的喜好。
每个小朋友对礼物的喜好可以用一个整数数组表示,数组中的每个元素代表一个礼物编号,数组的顺序代表小朋友对礼物的喜好程度,即第一个元素代表最喜欢的礼物,第二个元素代表次喜欢的礼物,以此类推。
老师想知道,是否有可能为每个小朋友分配一份他们最喜欢的礼物,如果可以,输出每个小朋友分配到的礼物编号;如果不可以,输出无法满足所有小朋友的喜好。
输入:
- 第一行包含两个整数N和M,分别代表小朋友的数量和礼物的总数。
- 接下来的N行,每行包含M个整数,代表一个小朋友对礼物的喜好列表。
输出:
- 如果可以满足所有小朋友的喜好,输出N行,每行包含一个整数,代表每个小朋友分配到的礼物编号。
- 如果无法满足所有小朋友的喜好,输出一行字符串:"无法满足所有小朋友的喜好"。
示例:
输入:
3 5
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
输出:
1
2
3
怎么样,是不是很简单,来做做吧
下面是c++实现的完整代码:
#include <iostream>
#include <vector>
#include <algorithm>using namespace std;bool canAssignGifts(vector<vector<int>>& preferences, int N, int M) {vector<int> giftAssignment(N, 0);vector<bool> assigned(M, false);for (int i = 0; i < N; ++i) {for (int j = 0; j < M; ++j) {int gift = preferences[i][j];if (!assigned[gift - 1]) {giftAssignment[i] = gift;assigned[gift - 1] = true;break;}}}// 检测for (int i = 0; i < N; ++i) {if (giftAssignment[i] == 0) {return false;}}// 输出for (int gift : giftAssignment) {cout << gift << endl;}return true;
}int main() {int N, M;cin >> N >> M;vector<vector<int>> preferences(N, vector<int>(M));for (int i = 0; i < N; ++i) {for (int j = 0; j < M; ++j) {cin >> preferences[i][j];}}if (!canAssignGifts(preferences, N, M)) {cout << "无法满足所有小朋友的喜好" << endl;}return 0;
}
这篇关于儿童节礼物-你能满足孩子们吗的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!