2017 Multi-University Training Contest 2 solutions 1001 Is Derek lying?

首先,我们统计出Derek和Alfia答案相同的题目数量k1和答案不同的题目数量k2. 对于两人答案相同的题目,共有以下两种情况:

  • 两人都对

b.两人都错 对于两人答案不同的题目,共有以下三种情况: c.Derek对Alfia错 d.Alfia对Derek错 e.两人都错 于是我们可以列出一些方程: k1+k2=n a+b=k1 c+d+e=k2 a+c=x a+d=y 又a,b,c,d,e均为非负整数,且满足a,b<=k1;c,d,e<=k2 将a,b,d,e全部用c替换后需要同时满足以下四个条件: 0<=c<=k2 x-y<=c<=k2+x-y (x-y)/2<=c<=(k2+x-y)/2 x-k1<=c<=x 我们只需要判断这四段区间存不存在公共的整数点,如果存在,则说明Derek没有说谎;如果不存在,则说明Derek在说谎。


#include <cstdio>
#include <cmath>
const int N=80005;
int main(){
    int t;
    int n,x,y;
    char D[N],A[N];
    scanf("%d",&t);
    while(t--){
        int cnt=0;
        scanf("%d%d%d ",&n,&x,&y);
        gets(D);
        gets(A);
        for(int i=0;i<n;i++){
            if(D[i]!=A[i])  cnt++;
        }
        if(fabs(x-y)>cnt || (x+y)>(2*n-cnt))   printf("Lying\n");
        else printf("Not lying\n");
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值