Submission #109588

#TimeUsernameProblemLanguageResultExecution timeMemory
109588ArturgoLamps (JOI19_lamps)C++14
100 / 100
539 ms67280 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...