This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <bitset>
using namespace std;
int nbCars;
string deb, fin;
int dyn[1000000][16];
bool estPasse[1000000][16];
bool execute(bool init, bitset<4> bits) {
if(bits[0])
init = 0;
if(bits[1])
init = 1;
if(bits[2])
init = 0;
if(bits[3])
init = !init;
return init;
}
int minInters(int pos, bitset<4> bits) {
if(pos == nbCars) {
return bits.count();
}
if(estPasse[pos][bits.to_ulong()])
return dyn[pos][bits.to_ulong()];
estPasse[pos][bits.to_ulong()] = true;
int mini = 1000 * 1000;
for(int sol = 0;sol < 16;sol++) {
bitset<4> nouv(sol);
if(execute(deb[pos] - '0', nouv) == fin[pos] - '0') {
mini = min(minInters(pos + 1, nouv) + (int)(nouv ^ bits).count(), mini);
}
}
return (dyn[pos][bits.to_ulong()] = mini);
}
int main() {
ios_base::sync_with_stdio(false);
cin >> nbCars;
cin >> deb >> fin;
cout << minInters(0, bitset<4>(0)) / 2 << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |