描述
题解
这个题的官方题解写的十分繁琐,感觉并没有他的解法那么麻烦,其实就是一个物理中常用的思维——极值考虑法,将各种情况考虑到最极端,只要最极端没问题,那么非极端的就更没有问题,反之,亦然。所以,只要考虑完全几种极值就好了,不难理解,看代码吧~~~
代码
#include <iostream>
using namespace std;
const int MAXN = 8e5 + 7;
int n, x, y;
char s1[MAXN];
char s2[MAXN];
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
scanf("%d%d%d", &n, &x, &y);
scanf("%s%s", s1, s2);
int cnt1 = 0, cnt2 = 0;
for (int i = 0; i < n; i++)
{
if (s1[i] == s2[i])
{
cnt1++;
}
else
{
cnt2++;
}
}
if (cnt1 >= x && cnt1 >= y)
{
cnt1 = min(x, y);
if (cnt1 + cnt2 < max(x, y))
{
printf("Lying\n");
}
else
{
printf("Not lying\n");
}
}
else
{
if (cnt1 < x && cnt1 < y)
{
int num = n - x;
if (num + cnt1 < y)
{
printf("Lying\n");
}
else
{
printf("Not lying\n");
}
}
else
{
if (x > y)
{
swap(x, y);
}
cnt1 = x;
if (cnt1 + cnt2 < y)
{
printf("Lying\n");
}
else
{
printf("Not lying\n");
}
}
}
}
return 0;
}