#include <algorithm>
#include <map>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
bool subject_is_done(string sbj, const map<string, vector<string>>& dates)
{
for (auto& p : dates)
{
if (find(p.second.begin(), p.second.end(), sbj) != p.second.end())
return true;
}
return false;
}
bool maestro_is_free(const pair<string, vector<string>>& p,
const pair<string, vector<string>>& date)
{
for (auto& sbj : p.second)
{
if (find(date.second.begin(), date.second.end(), sbj) != date.second.end())
return false;
}
return true;
}
int main()
{
map<string, vector<string>> subjects;
map<string, vector<string>> dates;
dates["2.9. Montag"];
dates["3.9. Dienstag"];
dates["4.9. Mittwoch"];
dates["5.9. Donnerstag"];
dates["6.9. Freitag"];
subjects["Mister A"] = {"Deutsch", "Religion", "Chemie"};
subjects["Mister B"] = {"Deutsch", "Sport", "Informatik"};
subjects["Mister C"] = {"Mathe", "Physik", "Informatik"};
subjects["Mister X"] = {"Englisch", "Biologie", "Chemie"};
for (auto& date : dates)
{
for (auto& p : subjects)
{
for (auto& sbj : p.second)
{
// Ekliger Hack, aber was soll's
if (!subject_is_done(sbj, dates) && maestro_is_free(p, date))
{
date.second.push_back(sbj);
}
}
}
}
for (auto& p : dates)
{
std::cout << p.first << ": ";
for (auto& sbj : p.second)
{
std::cout << sbj << ", ";
}
std::cout << '\n';
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKYm9vbCBzdWJqZWN0X2lzX2RvbmUoc3RyaW5nIHNiaiwgY29uc3QgbWFwPHN0cmluZywgdmVjdG9yPHN0cmluZz4+JiBkYXRlcykKewoJZm9yIChhdXRvJiBwIDogZGF0ZXMpCgl7CgkJaWYgKGZpbmQocC5zZWNvbmQuYmVnaW4oKSwgcC5zZWNvbmQuZW5kKCksIHNiaikgIT0gcC5zZWNvbmQuZW5kKCkpCgkJCXJldHVybiB0cnVlOwoJfQoJcmV0dXJuIGZhbHNlOwp9CiAKYm9vbCBtYWVzdHJvX2lzX2ZyZWUoY29uc3QgcGFpcjxzdHJpbmcsIHZlY3RvcjxzdHJpbmc+PiYgcCwgCgljb25zdCBwYWlyPHN0cmluZywgdmVjdG9yPHN0cmluZz4+JiBkYXRlKQp7Cglmb3IgKGF1dG8mIHNiaiA6IHAuc2Vjb25kKQoJewoJCWlmIChmaW5kKGRhdGUuc2Vjb25kLmJlZ2luKCksIGRhdGUuc2Vjb25kLmVuZCgpLCBzYmopICE9IGRhdGUuc2Vjb25kLmVuZCgpKQoJCQlyZXR1cm4gZmFsc2U7Cgl9CglyZXR1cm4gdHJ1ZTsKfQogCmludCBtYWluKCkKewoJbWFwPHN0cmluZywgdmVjdG9yPHN0cmluZz4+IHN1YmplY3RzOwoJbWFwPHN0cmluZywgdmVjdG9yPHN0cmluZz4+IGRhdGVzOwogCglkYXRlc1siMi45LiBNb250YWciXTsKCWRhdGVzWyIzLjkuIERpZW5zdGFnIl07CglkYXRlc1siNC45LiBNaXR0d29jaCJdOwoJZGF0ZXNbIjUuOS4gRG9ubmVyc3RhZyJdOwoJZGF0ZXNbIjYuOS4gRnJlaXRhZyJdOwogCglzdWJqZWN0c1siTWlzdGVyIEEiXSA9IHsiRGV1dHNjaCIsICJSZWxpZ2lvbiIsICJDaGVtaWUifTsKCXN1YmplY3RzWyJNaXN0ZXIgQiJdID0geyJEZXV0c2NoIiwgIlNwb3J0IiwgIkluZm9ybWF0aWsifTsKCXN1YmplY3RzWyJNaXN0ZXIgQyJdID0geyJNYXRoZSIsICJQaHlzaWsiLCAiSW5mb3JtYXRpayJ9OwoJc3ViamVjdHNbIk1pc3RlciBYIl0gPSB7IkVuZ2xpc2NoIiwgIkJpb2xvZ2llIiwgIkNoZW1pZSJ9OwogCglmb3IgKGF1dG8mIGRhdGUgOiBkYXRlcykKCXsKCQlmb3IgKGF1dG8mIHAgOiBzdWJqZWN0cykKCQl7CgkJCWZvciAoYXV0byYgc2JqIDogcC5zZWNvbmQpCgkJCXsKCQkJCS8vIEVrbGlnZXIgSGFjaywgYWJlciB3YXMgc29sbCdzCgkJCQlpZiAoIXN1YmplY3RfaXNfZG9uZShzYmosIGRhdGVzKSAmJiBtYWVzdHJvX2lzX2ZyZWUocCwgZGF0ZSkpCgkJCQl7CgkJCQkJZGF0ZS5zZWNvbmQucHVzaF9iYWNrKHNiaik7CgkJCQl9CgkJCX0KCQl9Cgl9CiAKCWZvciAoYXV0byYgcCA6IGRhdGVzKQoJewoJCXN0ZDo6Y291dCA8PCBwLmZpcnN0IDw8ICI6ICI7CgkJZm9yIChhdXRvJiBzYmogOiBwLnNlY29uZCkKCQl7CgkJCXN0ZDo6Y291dCA8PCBzYmogPDwgIiwgIjsKCQl9CgkJc3RkOjpjb3V0IDw8ICdcbic7Cgl9Cn0=
2.9. Montag: Deutsch, Mathe, Englisch,
3.9. Dienstag: Religion, Sport, Physik, Biologie,
4.9. Mittwoch: Chemie, Informatik,
5.9. Donnerstag:
6.9. Freitag: