题解 | #D 预知#

预知

https://ac.nowcoder.com/acm/contest/99458/D

D 预知

本题使用到了鸽巢原理(抽屉原理)的思想。

首先考虑 的情况,由于总卡牌数 ,故这是必败的。

时,看样例也能发现分为几种情况:

  • 全是 时,说明随便翻两张都必胜,所以
  • 只有一个 时,例如 这种情况,很多同学以为要预知 张,其实只要 张就够了,因为预知出来的两张都一样的话,说明剩下的四张就成了全 的情况,所以
  • 其他情况, ,因为我们预知 张相同的卡牌后,就知道了剩下的所有卡牌和已经知道的卡牌都是不一样的,从这两堆里各选一张即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;

int a[N];

void solve() {
    int n; cin >> n;
    for (int i = 1; i <= n; i ++ ) cin >> a[i];
    if (n == 1) {
        cout << -1 << endl;
        return ;
    }
    int mx = -1;
    for (int i = 1; i <= n; i ++){
        mx = max(mx, a[i]);
    }
    if (mx == 1) cout << 0 << endl;
    else {
        int cnt = 0;
        for (int i = 1; i <= n; i ++ ) {
            if (a[i] > 1) cnt ++;
        }
        if (cnt == 1) cout << mx - 1 << endl;
        else cout << mx << endl;
    }
}

int main(){
    int T; cin >> T;
    while (T -- ) solve();
    return 0;
}
全部评论
还有一种情况,只有两种牌的时候,只需要预知min-1张就可以了,这个题没有考虑到这种情况
1 回复 分享
发布于 03-19 19:15 四川
我觉得在最后一种情况里k=min且k!=0才是最少的数量,你在这个最小的类型里翻一张,再去其他牌里翻一张也肯定不会失败啊
点赞 回复 分享
发布于 05-09 02:25 湖北

相关推荐

26届双非不知道咋找得到实习了
kong_kong:1.广投,boss每天200次机会用完, 2.简历上技能和项目经历突出你在这个岗位上的突出优势。 3.还是广投,不要挑地点,公司规模(我当时是线下一个都不去,如果你离得近可以考虑一下去现场) 4.简历写的自己成绩好什么的,奖项也写一写(懂的都懂)
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务