Pagini recente » Cod sursa (job #3280433) | Cod sursa (job #1773482) | Cod sursa (job #2687178) | Cod sursa (job #1646233) | Cod sursa (job #1741780)
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("amlei.in");
ofstream fout("amlei.out");
class Conjunction {
private:
vector<bool> value;
public:
Conjunction(vector<int> variables) {
value.resize(variables.size() + 1, false);
for (auto& var : variables)
if (var > 0)
value[var] = true;
}
bool operator < (const Conjunction& obj) const {
return value < obj.value;
}
bool operator == (Conjunction& obj) const {
return value == obj.value;
}
};
class DisjunctionOfConjunctions {
private:
vector<Conjunction> conjunctions;
void Sort(void) {
sort(conjunctions.begin(), conjunctions.end());
}
void Unique(void) {
Sort();
conjunctions.erase(unique(conjunctions.begin(), conjunctions.end()), conjunctions.end());
}
public:
DisjunctionOfConjunctions(int varCount, int conjCount, vector<int> data) {
vector<int> curVar;
for (int i = 0; i < (int)data.size(); i += varCount) {
curVar.clear();
for (int j = i; j < i + varCount; ++j)
curVar.push_back(data[j]);
conjunctions.push_back(Conjunction(curVar));
}
}
bool Equal(DisjunctionOfConjunctions& obj) {
Unique(); obj.Unique();
if (conjunctions.size() != obj.conjunctions.size())
return false;
for (int i = 0; i < (int)conjunctions.size(); ++i) {
if (!(conjunctions[i] == obj.conjunctions[i]))
return false;
}
return true;
}
};
int main() {
int varCount, conjCount1, conjCount2;
while (fin >> varCount >> conjCount1 >> conjCount2) {
vector<int> cur;
for (int i = 1; i <= varCount * conjCount1; ++i) {
int x; fin >> x;
cur.push_back(x);
}
DisjunctionOfConjunctions first(varCount, conjCount1, cur);
cur.clear();
for (int i = 1; i <= varCount * conjCount2; ++i) {
int x; fin >> x;
cur.push_back(x);
}
DisjunctionOfConjunctions second(varCount, conjCount2, cur);
fout << (first.Equal(second) ? "DA" : "NU") << '\n';
}
return 0;
}
//Trust me, I'm the Doctor!