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>
#include <vector>
using namespace std;
int nbCars;
string deb, fin;
int dyn[1000001][16];
inline 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;
}
vector<bitset<4>> confPossibles;
vector<bitset<4>> transPossibles[2][2];
int main() {
ios_base::sync_with_stdio(false);
cin >> nbCars;
cin >> deb >> fin;
for(int iBits = 0;iBits < 16;iBits++) {
bitset<4> bits(iBits);
if(bits[0] && bits[2])
continue;
confPossibles.push_back(bits);
}
for(int bitD = 0;bitD < 2;bitD++) {
for(int bitF = 0;bitF < 2;bitF++) {
for(bitset<4> config : confPossibles) {
if(execute(bitD, config) == bitF) {
transPossibles[bitD][bitF].push_back(config);
}
}
}
}
for(int sol = 0;sol < 16;sol++) {
dyn[nbCars][sol] = bitset<4>(sol).count();
}
for(int pos = nbCars - 1;pos >= 0;pos--) {
for(bitset<4> bits : confPossibles) {
int mini = 1000 * 1000;
for(bitset<4> suiv : transPossibles[deb[pos] - '0'][fin[pos] - '0']) {
mini = min(dyn[pos + 1][suiv.to_ulong()] + (int)(suiv ^ bits).count(), mini);
}
dyn[pos][bits.to_ulong()] = mini;
}
}
cout << dyn[0][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... |