1. 程式人生 > >hdu 6045 Is Derek lying?(思維推導)

hdu 6045 Is Derek lying?(思維推導)

同時 character when color pro clas poi eth tro

Problem Description

Derek and Alfia are good friends.Derek is Chinese,and Alfia is Austrian.This summer holiday,they both participate in the summer camp of Borussia Dortmund.During the summer camp,there will be fan tests at intervals.The test consists of N choice questions and each question is followed by three choices marked “A” “B” and “C”.Each question has only one correct answer and each question is worth 1 point.It means that if your answer for this question is right,you can get 1 point.The total score of a person is the sum of marks for all questions.When the test is over,the computer will tell Derek the total score of him and Alfia.Then Alfia will ask Derek the total score of her and he will tell her: “My total score is X,your total score is Y.”But Derek is naughty,sometimes he may lie to her. Here give you the answer that Derek and Alfia made,you should judge whether Derek is lying.If there exists a set of standard answer satisfy the total score that Derek said,you can consider he is not lying,otherwise he is lying.

Input

The first line consists of an integer T,represents the number of test cases.

For each test case,there will be three lines.

The first line consists of three integers N,X,Y,the meaning is mentioned above.

The second line consists of N characters,each character is “A” “B” or “C”,which represents the answer of Derek for each question.

The third line consists of N characters,the same form as the second line,which represents the answer of Alfia for each question.

Data Range:1≤N≤80000,0≤X,Y≤N,∑Ti=1N≤300000

Output

For each test case,the output will be only a line.

Please print “Lying” if you can make sure that Derek is lying,otherwise please print “Not lying”.

Sample

Sample Input

2 
3 1 3 
AAA 
ABC 
5 5 0 
ABCBC 
ACBCB

Sample Output

Not lying 
Lying

題意:

  現在兩個人同時回答一套題,ABC三個選項,只有一個是正確的,答對得一分,答錯不得分,給出兩個人的成績和答案,判斷這兩個成績是否合理。

  比如一共五個題,兩個人的得分都是五分,然後兩個人的答案都不相同,那麽表示不合理。

思路:

  沒什麽技巧,就是推理題目。推理方法有很多種,只要合理就行。

  思路一:記錄兩個人答案相同的個數,如果 兩個人成績的和小於等於題目總數加上相同的個數 並且 兩個人的分數差小於等於題目總數減去相同的個數,則表示沒說謊。

  思路二:記錄兩人答案相同和不同的題數,如果 兩個人成績的和小於等於不同的個數加上兩倍的相同的個數 並且 兩個人分數差小於等於不相同的答案數,則表示沒說謊

代碼一:

/*
ACACBCA
BABACBB
*/
#include<stdio.h>
#include<math.h>
#include<cmath>
using namespace std;
char a1[80050],a2[80050];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,x,y,i,j;
        int butong=0,xiangtong=0;
        scanf("%d%d%d",&n,&x,&y);
        scanf("%s%s",a1,a2);
        for(i=0;i<n;i++)//計算相同和不同的個數
        {
            if(a1[i]==a2[i])
                xiangtong++;
            else
                butong++;
        }
        if(x+y<=n+xiangtong&&abs(x-y)<=n-xiangtong)
            printf("Not lying\n");
        else
            printf("Lying\n");
    }
}

代碼二:

/*
ACACBCA
BABACBB
*/
#include<stdio.h>
#include<math.h>
#include<cmath>
using namespace std;
char a1[80050],a2[80050];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,x,y,i,j;
        int butong=0,xiangtong=0;
        scanf("%d%d%d",&n,&x,&y);
        scanf("%s%s",a1,a2);
        for(i=0;i<n;i++)//計算相同和不同的個數
        {
            if(a1[i]==a2[i])
                xiangtong++;
            else
                butong++;
        }
        if(abs(x-y)<=butong&&x+y<=butong+2*xiangtong)
            printf("Not lying\n");
        else
            printf("Lying\n");
    }
}

hdu 6045 Is Derek lying?(思維推導)