diff --git a/longest-increasing-subsequence/longest-increasing-subsequence.pdf b/longest-increasing-subsequence/longest-increasing-subsequence.pdf index 69b8801..4f5d246 100644 Binary files a/longest-increasing-subsequence/longest-increasing-subsequence.pdf and b/longest-increasing-subsequence/longest-increasing-subsequence.pdf differ diff --git a/longest-increasing-subsequence/problem.json b/longest-increasing-subsequence/problem.json index f0ed1f5..3603b65 100644 --- a/longest-increasing-subsequence/problem.json +++ b/longest-increasing-subsequence/problem.json @@ -11,7 +11,7 @@ "grader": false, "subject": { "en_us": [ - "dynamic-programming", "longest-increasing-subsequence" + "dynamic-programming", "longest-increasing-subsequence", "LIS" ], "pt_br": [ "programação-dinâmica", "maior-subsequência-crescente" diff --git a/longest-increasing-subsequence/src/checker.cpp b/longest-increasing-subsequence/src/checker.cpp index 86f27d1..bb6eef3 100644 --- a/longest-increasing-subsequence/src/checker.cpp +++ b/longest-increasing-subsequence/src/checker.cpp @@ -3,19 +3,35 @@ using namespace std; -bool isPaAnswerOk(vector &nums, vector &ans) { +int readAns(InStream& stream, vector& nums) { + + int size = stream.readInt(1, 1e3); + vector ans; + while (!stream.seekEof()) + ans.push_back(stream.readInt()); + + if (size != ans.size()) + quitf(_wa, "Subsequence does not match size provided"); + for (int i = 1; i < ans.size(); i++) { - if (ans[i - 1] >= ans[i]) return false; + if (ans[i - 1] >= ans[i]) { + quitf(_wa, "Subsequence is not strictly increasing"); + } } + // checking if numbers provided are indeed a subsequence of the original array int j = 0; - for (int i = 0, j = 0; i < nums.size() && j < ans.size(); i++) { + for (int i = 0; i < nums.size() && j < ans.size(); i++) { if (nums[i] == ans[j]) { j++; } } - return j == (int)ans.size(); + if (j != size) { + quitf(_wa, "The provided subsequence is not present in the original array"); + } + + return size; } @@ -27,18 +43,8 @@ int main(int argc, char* argv[]) { vector nums(n); for (int i = 0; i < n; i++) nums[i] = inf.readInt(); - int ja = ans.readInt(); - int pa = ouf.readInt(1, 1e3); - - vector paAns; - while (!ouf.seekEof()) - paAns.push_back(ouf.readInt()); - - if (pa != paAns.size()) - quitf(_wa, "Subsequence does not match size provided"); - - if (!isPaAnswerOk(nums, paAns)) - quitf(_wa, "Subsequence does not match the constraints"); + int ja = readAns(ans, nums); + int pa = readAns(ouf, nums); if (ja > pa) quitf(_wa, "Expected (%i) found (%i)", ja, pa);