2017多校联合第二场 1001题 hdu 6045 Is Derek lying?

34 篇文章 0 订阅
8 篇文章 0 订阅

题目链接


题意:

有 n 道题目,每道题目是 3 个选项,有且只有一个正确选项,

现有两人,分别给出这两人的答题卡(雾),以及最后得分 x 和 y,问这种情况可不可能


思路:

考虑两个人相同的题目数 tot,不同的题目数 n - tot,

假设同对的有 i 题,那么 x >= i, 且 y >= i,

并且只有甲对的题目有 x - i 题, 必然包含在不同的题目数中,故 x - i <= n - tot,

不同的题目中甲对的乙肯定不能对,其他的不同的题乙可以对,故乙对的题目总数小于等于 共同对的题目 以及 不同的题目中甲错的题目,

即 y <= i + (n - tot) - (x - i),

i 从 0 到 min(min(x, y), tot) 枚举即可


AC代码如下:

#include <cstdio>
#include <cmath>
#include <cstring>
#define mod 1000000007
#define maxn 100010
using namespace std;
typedef long long LL;
char s1[maxn], s2[maxn];
int kas, n, m, x, y;
inline int min(int a, int b) { return a < b ? a : b; }
inline int abs(int a, int b) { return a > b ? a - b : b - a; }
void work() {
    scanf("%d%d%d\n", &n, &x, &y);
    scanf("%s%s", s1, s2);
    int tot = 0;
    for (int i = 0; i < n; ++i) {
        if (s1[i] == s2[i]) ++tot;
    }
    int lim = min(min(x, y), tot);
    bool flag = false;
    for (int i = 0; i <= lim; ++i) {
        if (x - i <= n - tot && y <= i + n - tot - (x - i)) {
            flag = true; break;
        }
    }
    if (flag) printf("Not lying\n");
    else printf("Lying\n");
}
int main() {
    int t;
    scanf("%d", &t);
    while (t--) work();
    return 0;
}


之后的碎碎念:

水题

显然就应该是道水题无疑

然鹅WA了好多回啊...

这种一眼看上去好像有点数,但说出来又感觉很迷糊啥的

从各种角度都能找出来一两个条件,但又总是不充分啥的

就......WA了很多回

而且也不够冷静脑子也不清醒...

最后还是学姐解决了的(星星眼


限制条件其实还挺多的,要心平气和地去想啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值