HDU 6045 - Is Derek lying | 2017 Multi-University Training Contest 2

本文针对HDU6045-IsDereklying问题进行解答,该问题涉及给定两种答案及对应的得分情况,判断得分是否合理。通过统计相同与不同答案的数量,计算可能的得分范围,进而验证得分的有效性。
/*
HDU 6045 - Is Derek lying [ 分析 ]
题意:
	有N个问题, 每个问题有A,B,C三种答案,答对加一分,答错不加分
	给出甲乙两人的答案,给出两人的分数先x, y,问分数是否正确
分析:
	统计甲乙相同的答案数目为 a, 不同的答案数目为 b
	若甲的分数为x,则y能取到的最小值为 max(0, x-b),即甲答对的题目尽量在b中
	y能取到的最大值为 b-max(0,x-a)+min(x,a) ,即甲答对的题目尽量在a中,答错的尽量在b中

编码时长:32分钟(-1)
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 80005;
int t, n, x, y;
char s1[N], s2[N];
int main()
{
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d%d%d", &n, &x, &y);
        scanf("%s%s", s1, s2);
        int a = 0, b = 0;
        for (int i = 0; i < n; i++)
        {
            if (s1[i] == s2[i]) a++;
            else b++;
        }
        int miny = max(0, x-b);
        int maxy = b - max(0, x-a) + min(x, a);
        if (miny <= y && y <= maxy) puts("Not lying");
        else puts("Lying");
    }
}

  

转载于:https://www.cnblogs.com/nicetomeetu/p/7247477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值