Can someone find the problem please?
Difference between en1 and en2, changed 0 character(s)
So I have been banging my head on the table for hours now, I have been practicing the exercises accompanying the book Competitive Programming 3, I was doing UVa 00416 LED test, but for some reason my code is giving me a WA (Wrong Answer) verdict I am not sure why, I even found a working solution online and I have wrote a simple code to randomly generate testcases and run both (my and the solution) codes and terminate if the outputs were different but it didn't and I have been checking for a lot of testcases now. I think I have really spent more hours than I should have on this problem so if someone can spot the mistake in my code I would be really grateful for him/her. Thanks in advance.↵


~~~~~↵
#include<bits/stdc++.h>↵

using namespace std;↵

typedef vector<int> vi;↵
typedef vector<vi> vvi;↵

bool isMatch;↵
int N, reliabilityLimits[7];↵
bitset<7> sequence[10];↵
vvi digits  = {↵
{1, 1, 1, 1, 1, 1, 0},↵
{0, 1, 1, 0, 0, 0, 0},↵
{1, 1, 0, 1, 1, 0, 1},↵
{1, 1, 1, 1, 0, 0, 1},↵
{0, 1, 1, 0, 0, 1, 1},↵
{1, 0, 1, 1, 0, 1, 1},↵
{1, 0, 1, 1, 1, 1, 1},↵
{1, 1, 1, 0, 0, 0, 0},↵
{1, 1, 1, 1, 1, 1, 1},↵
{1, 1, 1, 1, 0, 1, 1}↵
};↵

bool canBeDigit (int sequenceIndex, int Digit) {↵
//cerr << "// canBeDigit(" << sequenceIndex << ", " << Digit << ")\n";↵
//↵
// Can't find the test case that gives a wrong answer↵
//↵
for (int i = 0; i < 7; i++) {↵
if (sequence[sequenceIndex][i]) {↵
if (!digits[Digit][i]) return false;↵
} else {↵
if (digits[Digit][i] && reliabilityLimits[i] >= sequenceIndex) return false;↵
}↵
}↵
return true;↵
}↵

void backtrack (int sequenceIndex, int Digit) {↵
//cerr << "// backtrack(" << sequenceIndex << ", " << Digit << ")\n";↵
//cerr << "// N : " << N << '\n';↵
if (sequenceIndex == N) {↵
//cerr << "// Found it!!!\n";↵
isMatch = true;↵
return;↵
}↵
if (canBeDigit(sequenceIndex, Digit)) backtrack(sequenceIndex + 1, Digit - 1);↵
}↵

int main () {↵
ios_base::sync_with_stdio(false);↵
cin.tie(NULL);↵

while (cin >> N && N) {↵
isMatch = false;↵
fill(reliabilityLimits, reliabilityLimits + 7, -1);↵
memset(sequence, 0, sizeof sequence);↵
for (int i = 0; i < N; i++) {↵
cin.ignore();↵
for (int j = 0; j < 7; j++) {↵
sequence[i][j] = (cin.get() == 'Y');↵
if (sequence[i][j]) {↵
reliabilityLimits[j] = i;↵
}↵
}↵
}↵

//cerr << "// sequence:-\n";↵
//for (bitset<7> ele : sequence) {↵
// cerr << "// " << ele.to_string() << '\n';↵
//}↵

//cerr << "// reliabilityLimits :";↵
//for (int i : reliabilityLimits) {↵
// cerr << ' ' << i;↵
//}↵
//cerr << '\n';↵

for (int i = N - 1; i < 10 && !isMatch; i++) {↵
if (canBeDigit(0, i)) {↵
backtrack(1, i - 1);↵
//cerr << "// after backtracking isMatch : " << (isMatch ? "true" : "false") << '\n';↵
}↵
}↵

cout << (isMatch ? "MATCH\n" : "MISMATCH\n");↵
}↵
}↵
~~~~~↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English elgamalsalman 2021-01-14 10:52:32 0 (published)
en1 English elgamalsalman 2021-01-14 10:51:35 2899 Initial revision (saved to drafts)