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

xiaoxiao2021-02-28  91

首先,我们统计出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; }

转载请注明原文地址: https://www.6miu.com/read-75676.html

最新回复(0)