2022-03-25每日刷题打卡

2022-03-25每日刷题打卡

代码源——每日一题

饿饿 饭饭之暑假大狂欢 - 题目 - Daimayuan Online Judge

故事接着《饿饿 饭饭 2》,又过了几个月,暑假来啦!!!

这天,c和他的小伙伴们决定一起去游乐园玩,他们一天将游乐园的所有设施玩了个遍,甚至大摆锤,过山车他们还去了很多次,愉快的时间总是很短暂的,很快时间就来到了晚上,但是你以为一天的娱乐时光就这样结束了吗,那你就猜错啦。

晚上,游乐园晚上的party就开始啦,其中有一个游戏环节,赢的人可以得到免费的西瓜,饿到不行的c和他的小伙伴非常希望得到这个西瓜。

包括c和他的小伙伴,有t个玩家参与了这个游戏,每个玩家都有一张带有数字的卡片。第ii张卡片上有ni个数字,分别是m1,m2,…mn。

游戏过程中,主持人从袋子里一个一个地取出编号的球。 他用洪亮而清晰的声音大声念出球的编号,然后把球收起来。 如果玩家的卡片上有对应的数字,就可以将它划掉。 最先从他的卡片上划掉所有数字的人获胜。 如果多人同时从他们的卡片上划掉所有数字,那么这些人都不能赢得比赛。 在游戏开始时,袋子里有 100 个球,编号从 1 到 100,所有球的编号都是不同的。

c偷偷知道了每个玩家的数字。 想请你确定每个玩家是否可以在最有利于他的情况下赢得比赛。

输入格式

第一行给出一个数t,代表t个玩家。

接下来第二行到t+1行,每行第一个数为ni,代表这个人手中有n个卡片,接下来给出序列a1…an表示这个人所拥有的卡片的数字。

输出格式

输出t行,每一行给出第i个人在最有利的情况下是否能赢得比赛,可以输出YES, 不可以输出NO

数据范围

1≤t≤100,1≤n≤100,1≤mi≤100样例输入

3
1 1
3 2 4 1
2 10 11
样例输出
YES
NO
YES

想要有利的情况下自己胜出,也就是说选出的数都是自己有的,而且自己在第一个清空前不能有别人比自己先清空。

意思就是自己不能包含别人的全部数:别人不能是自己的子集。比如自己是1 3 5,别人是3 5,那么最好的情况也是别人和我一起清空,这样两边都不能赢,如果自己是1 3 5,别人是3 4,那我只要不删4就行了,这样就是我先赢。

那么我们就记录每个玩家的牌的情况,然后判断我们的牌是否完全包含其它玩家的牌,如果有一个完全包含那我们就不能赢。

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")

#define endl '\n';
typedef long long ll;
typedef pair<ll, ll>PII;
int mymap[101][101];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int t, n;
    cin >> t;
    for (int i = 0; i < t; i++)
    {
        cin >> n;
        for (int j = 0; j < n; j++)
        {
            int num;
            cin >> num;
            mymap[i][num]=1;
        }
    }
    for (int i = 0; i < t; i++)
    {
        bool flag = true;
        for (int j = 0; j < t; j++)
        {
            if (i == j)continue;
            bool st = false;
            for (int k = 0; k <= 100; k++)
            {
                if (mymap[i][k] < mymap[j][k])
                {
                    st = true;
                    break;
                }
            }
            if (!st)
            {
                flag = false;
                break;
            }
        }
        if (!flag)
        {
            cout << "NO" << endl;
        }
        else cout << "YES" << endl;

    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值