Derek
Derek and
Alfia
Alfia are good friends.
Derek
Derek is Chinese,and
Alfia
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
N choice questions and each question is followed by three choices marked “
A
A” “
B
B” and “
C
C”.Each question has only one correct answer and each question is worth
1
1 point.It means that if your answer for this question is right,you can get
1
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
Derek the total score of him and
Alfia
Alfia.Then
Alfia
Alfia will ask
Derek
Derek the total score of her and he will tell her: “My total score is
X
X,your total score is
Y
Y.”But
Derek
Derek is naughty,sometimes he may lie to her. Here give you the answer that
Derek
Derek and
Alfia
Alfia made,you should judge whether
Derek
Derek is lying.If there exists a set of standard answer satisfy the total score that
Derek
Derek said,you can consider he is not lying,otherwise he is lying.
For each test case,there will be three lines.
The first line consists of three integers N N, X X, Y Y,the meaning is mentioned above.
The second line consists of N N characters,each character is “ A A” “ B B” or “ C C”,which represents the answer of Derek Derek for each question.
The third line consists of N N characters,the same form as the second line,which represents the answer of Alfia Alfia for each question.
Data Range: 1≤N≤80000 1≤N≤80000, 0≤X,Y≤N, 0≤X,Y≤N, ∑Ti=1N≤300000 ∑i=1TN≤300000
Please print “ Lying Lying” if you can make sure that Derek Derek is lying,otherwise please print “ Not lying Not lying”.
2 3 1 3 AAA ABC 5 5 0 ABCBC ACBCB
Not lying Lying
有n道题,每个题有ABC三个选项,有一个答案是正确的。每道题做对得一分,做错不得分,给定命题:“第一个人得X分,第二个人得Y分”,然后有这两个人关于这n道题得答案,判断一下这个答案序列能否成立
#include<algorithm>
using namespace std;
int main()
{
int n,m,x,y;
char str[80001],str1[80001];
scanf("%d",&n);
while(n--)
{
int ans=0;
scanf("%d %d %d",&m,&x,&y);
scanf("%s %s",str,str1);
for(int i=0; i<m; i++)
{
if(str[i]==str1[i])
ans++;
}
if(abs(x-y)<=m-ans&&(x+y)<=m+ans)
printf("Not lying\n");
else
printf("Lying\n");
}
return 0;
}
/*
按这两个列子找出判断条件的不等式,理解确实吃力,最好从反面考虑,
即从大于的那面考虑,不要从小于等于那面考虑
abs(x-y)表示两个的分数差,m-ans表示两个人答案不同的个数
如果答案不同的个数小于分数差的话,肯定是假话,因为 分数差 来自于 答案不同的个数
如果x+y还大于了 可能正确的 最大分数和 的话,也肯定是假话
2
3 1 3
AAA
AAC
Lying
3 1 3
AAA
BBB
Lying
*/