I was solving the problem1800E2
I came across strange behaviour while comparing strings in c++. My first submission failed on testcase 2, I changed the code to compare string and instead of using "==" wrote my comparator myself and it passed. I fail to understand my mistake in the first implementation.
submission 1: Link
submission 2: Link
Basically my code included
string ta = a.substr(i, min(k, n) - i);
string tb = b.substr(i, min(k, n) - i);
if(ta == tb) cout << "YES\n";
else cout << "NO\n";
which failed the testcases then i changed this part of code to
for(int j = i; j < min(n, k); j++) {
if(a[j] != b[j]) valid = 0;
}
This passed the testcase. I dont understand what was the problem in the first implementation, can anyone point something out that I am too dumb to understand.
Sorry for my poor english, Thanks in advance.
Auto comment: topic has been updated by ThreeKnives (previous revision, new revision, compare).
Most likely you pass negative length to substr
The substring code is inside if block with condition if(i < n), could you provide an example where the substring will be getting a negative length.
You check that (i < k) but you should do (i < min(k, n)) instead
I did that but still it fails on the same test case.
Submission Link
In first solve you have
continue
and in second you have justvalid = 0
.So first solve doesn't include the case when
valid = 0
comes from the first loopinstead of
would fix that
oh, got it, Thanks. I am so stupid.