Untitled
unknown
c_cpp
a year ago
3.3 kB
9
Indexable
#include <bits/stdc++.h>
using namespace std;
long long fact(int n) {
long long ret = 1;
for (int i = 1; i <= n; ++i) {
ret *= i;
}
return ret;
}
long long power(int a, int b) {
long long res = 1;
for (int i = 0; i < b; ++i) {
res *= a;
}
return res;
}
vector<string> T = {"A", "AB", "B", "O"};
// john = 0
// kaita = 1
// lauren = 2
// max = 3
//
enum NAMES {
JOHN,
KAITA,
LAUREN,
MAX
};
set<pair<string, string>> can_donate;
bool is_valid(vector<string> types) {
bool john_kaita = can_donate.count({types[JOHN], types[KAITA]});
bool kaita_john = !can_donate.count({types[KAITA], types[JOHN]});
bool john_lauren = !can_donate.count({types[JOHN], types[LAUREN]});
bool max_john = can_donate.count({types[MAX], types[JOHN]});
bool max_kaita = can_donate.count({types[MAX], types[KAITA]});
bool max_lauren = can_donate.count({types[MAX], types[LAUREN]});
return john_kaita && kaita_john && john_lauren && max_john && max_kaita && max_lauren;
}
void go(vector<string> types) {
if (types.size() == 4) {
if (is_valid(types)) {
for (auto t: types)
cout << t << " ";
cout << endl;
}
return;
}
for (auto type: T) {
vector<string> tmp = types;
tmp.push_back(type);
go(tmp);
}
}
enum NAMES_2 {
DARIUS,
DAPH,
DITE,
ROG,
RACH,
RAH
};
bool is_valid_2(vector<string> doners, vector<string> reciept) {
for (int i = 0; i < 3; ++i) {
if (!can_donate.count({doners[i], reciept[i]}))
return false;
}
return true;
}
bool contains(string s, vector<string> vec) {
for (auto ss: vec) {
if (s == ss) {
return true;
}
}
return false;
}
int total = 0;
int valid = 0;
void go_2(vector<string> doners, vector<string> reciept) {
if (doners.size() == 3) {
total++;
if (is_valid_2(doners, reciept)) {
++valid;
for (auto t: doners)
cout << t << " ";
cout << "--";
for (auto t: reciept)
cout << t << " ";
cout << endl;
}
return;
}
vector<string> opt_don = {"A", "B", "O"};
vector<string> opt_rec = {"A", "B", "AB"};
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (contains(opt_don[i], doners) || contains(opt_rec[j], reciept)) {
continue;
}
vector<string> tmp_d = doners;
tmp_d.push_back(opt_don[i]);
vector<string> tmp_r = reciept;
tmp_r.push_back(opt_rec[j]);
go_2(tmp_d, tmp_r);
}
}
}
int main() {
can_donate.insert({"A", "A"});
can_donate.insert({"A", "AB"});
can_donate.insert({"AB", "AB"});
can_donate.insert({"B", "B"});
can_donate.insert({"B", "AB"});
can_donate.insert({"O", "O"});
can_donate.insert({"O", "A"});
can_donate.insert({"O", "AB"});
can_donate.insert({"O", "B"});
go_2({}, {});
cout << total << " " << valid << endl;
return 0;
}
// 1 = 26.6666667 * 60
// 1.5 => 2400
// 1 => ?
Editor is loading...
Leave a Comment