64,649
社区成员
发帖
与我相关
我的任务
分享
//每个学生3名导师,任意两个学生的导师团队最多有一个人相同
std::vector<std::set<int> > slice(const std::vector<int> &ival);
int main()
{
using namespace std;
ofstream fout;
fout.open("note.txt");
if(!fout.is_open())
{
cerr << "File can not open.\n";
exit(EXIT_FAILURE);
}
cout << "请输入教授的数目(> 2,q to quit): ";
vector<int>::size_type pnumber;
while(cin >> pnumber && pnumber > 2)
{
vector<int> professor;
for(vector<int>::size_type i = 0; i < pnumber; ++i)
professor.push_back(i);
vector<set<int> > team_vec(slice(professor));
for(vector<set<int> >::size_type i = 0; i < team_vec.size(); ++i)
{
for(vector<set<int> >::size_type j = i + 1; j < team_vec.size(); ++j)
{
set<int> temp_set;
set_intersection(team_vec[i].begin(), team_vec[i].end(), team_vec[j].begin(),
team_vec[j].end(), inserter(temp_set, temp_set.begin()));
if(temp_set.size() == 2)
{
team_vec.erase(team_vec.begin() + j);
--j;
}
}
}
cout << pnumber << "个教授可以辅导" << team_vec.size() << "个学生。"
<< "分配如下:" << endl;
fout << pnumber << "个教授可以辅导" << team_vec.size() << "个学生。"
<< "分配如下:" << endl;
for(vector<set<int> >::size_type i = 0; i < team_vec.size(); ++i)
{
fout << "< ";
for(set<int>::iterator iter = team_vec[i].begin(); iter != team_vec[i].end(); ++iter)
fout << *iter << " ";
fout << ">" << endl;
}
fout << endl;
cout <<"请输入教授的数目(> 2,q to quit): ";
}
fout.close();
return 0;
}
std::vector<std::set<int> > slice(const std::vector<int> &ival)
{
typedef std::vector<int>::size_type size;
std::set<std::set<int> > rec_set;
for(size i = 0; i < ival.size() - 2; ++i)
{
std::set<int> temp;
temp.insert(ival[i]);
for(size j = i + 1; j < ival.size() - 1; ++j)
{
temp.insert(ival[j]);
for(size k = j + 1; k < ival.size(); ++k)
{
temp.insert(ival[k]);
rec_set.insert(temp);
temp.erase(ival[k]);
}
temp.erase(ival[j]);
}
temp.erase(ival[i]);
}
std::vector<std::set<int> > rec_vec(rec_set.begin(), rec_set.end());
return rec_vec;
}
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
std::vector<std::set<int> > slice(const std::vector<int> &ival);
int main()
{
using namespace std;
cout << "请输入教授的数目(> 2,q to quit): ";
vector<int>::size_type pnumber;
while(cin >> pnumber && pnumber > 2)
{
vector<int> professor;
for(vector<int>::size_type i = 0; i < pnumber; ++i)
professor.push_back(i);
vector<set<int> > team_vec(slice(professor));
for(vector<set<int> >::size_type i = 0; i < team_vec.size(); ++i)
{
for(vector<set<int> >::size_type j = i + 1; j < team_vec.size(); ++j)
{
set<int> temp_set;
set_intersection(team_vec[i].begin(), team_vec[i].end(), team_vec[j].begin(),
team_vec[j].end(), inserter(temp_set, temp_set.begin()));
if(temp_set.size() == 2)
{
team_vec.erase(team_vec.begin() + j);
--j;
}
}
}
cout << pnumber << "个教授可以辅导" << team_vec.size() << "个学生。"
<< endl << "请输入教授的数目(> 2,q to quit): ";
}
return 0;
}
std::vector<std::set<int> > slice(const std::vector<int> &ival)
{
typedef std::vector<int>::size_type size;
std::set<std::set<int> > rec_set;
for(size i = 0; i < ival.size() - 2; ++i)
{
std::set<int> temp;
temp.insert(ival[i]);
for(size j = i + 1; j < ival.size() - 1; ++j)
{
temp.insert(ival[j]);
for(size k = j + 1; k < ival.size(); ++k)
temp.insert(ival[k]);
}
rec_set.insert(temp);
}
std::vector<std::set<int> > rec_vec(rec_set.begin(), rec_set.end());
return rec_vec;
}