在过去的几天里,我一直在疯狂地试图解决这个座位分配问题,并想知道是否有人可以帮助我。
说明说:
假设一组 n 名学生一起来上课(或看电影),并且恰好有 n 个座位在 1 排连续可用。给定 m 对座位的偏好,你要确定有多少学生想要就座来统计偏好。
输入
输入将仅来自键盘。输入将包含多个测试用例。每个测试用例以两个整数 0 < n 和 0 ≤ m 开始,其中 n 是要坐下的学生数量,m 是偏好数量。为简单起见,假设学生的编号从 0 到 n - 1。然后是 m 行,每行描述一个偏好,其中一行由三个整数 a、b 和 c 组成,满足 0 ≤ a < b < n 和 0 < |c| <名词。如果 c 是正数,那么青少年 a 和 b 最多希望坐在 c 个座位之间。如果 c 为负数,则 a 和 b 至少要分开 -c 个座位。输入结束由一条由 n = m = 0 组成的线表示。
输出
每个测试用例的输出是一行,其中包含满足所有输入约束的组的可能座位安排的数量。
样本输入
3 1
0 1 -2
3 0
0 0
样本输出
2
6
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <iterator>
using namespace std;
struct Preference
{
int a;
int b; //Struct with three preferences
int c;
};
int main()
{
int a,b,c,students,numpref;
int count = 0;
vector<Preference> prefs; //Vector with struct to store preferences
Preference case1;
cout<<"Enter number of students and preferences: ";
cin>>students>>numpref; //Total Number of students and preferences are entered
for(int i = 0; i<=numpref; i++)
{
cin>>case1.a>>case1.b>>case1.c;
prefs.push_back(case1); //Stores preferences in vector
cout<<endl;
}
vector<int> v2(a); //Second vector created to store list of students
sort(v2.begin(), v2.end());
while(next_permutation(v2.begin(), v2.end()))
//Finds all permutations of student seating
{
}
system("PAUSE");
return 0;
}
我知道它不完整,但我主要是想弄清楚如何将每一行偏好与正确的排列进行比较,然后计算结果。我考虑过获取用户输入的向量中每个元素的位置(例如:示例中的 0,1),并检查找到的每个排列是否有 0 和 1,它们之间至少有 2 个座位。但这行不通。