ACM模版

描述

题解

这个题的官方题解写的十分繁琐,感觉并没有他的解法那么麻烦,其实就是一个物理中常用的思维——极值考虑法,将各种情况考虑到最极端,只要最极端没问题,那么非极端的就更没有问题,反之,亦然。所以,只要考虑完全几种极值就好了,不难理解,看代码吧~~~

代码

#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;
}