제출 #109584

#제출 시각아이디문제언어결과실행 시간메모리
109584ArturgoLamps (JOI19_lamps)C++14
47 / 100
1053 ms161092 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...