• CF 217 B. Berland Bingo


    http://codeforces.com/contest/370/problem/B

    题意 :呃,这个题我说不清楚。。。。就是有n个人,第 i 个人手里有 mi 张牌,如果,现在主人念数,念到哪张牌谁就把哪张删掉,最后谁手里没有了谁就赢,如果同时没有了,两个人都输都输出no,最重要的是Write a program that determines whether a player can win the game at the most favorable for him scenario or not.这句话,意思是说每个人都按照每个人想要的哪种方式去念牌,根据样例,第一个人手里有1张牌,是1,第二个人手里有3张牌,分别是2 4 1,第三个人手里2张牌,分别是10和11,按照第一个人想自己赢的方式念牌,应该念1,所以他没有牌了,它可以赢,而对于第二个人来讲,无论怎么念,要么1赢他输,要么两个人全输,而对于第三个人来讲,先念10再念11就可以赢。

    思路:这个题,挺坑的。。。。表示交了好几遍呢。。。。这个明白点就是找子集呢,如果第 i 个人手里的牌在第 j 个人手里全有,并且还有别的牌,那么第 i 个人就可以赢,而第 i 个人一定输,所以就是判断子集包含。。。。

    #include <iostream>
    #include <stdio.h>
    #include <vector>
    using namespace std ;
    bool contains(vector<int>a,vector<int>b)//b in a?
    {
        for(int i = 0 ; i < b.size() ; i++)
        {
            bool in = false ;
            for(int j = 0 ; j < a.size() ; j++)
            {
                if(a[j] == b[i])
                    in = true ;
            }
            if(!in)
                return false ;
        }
        return true ;
    }
    int main()
    {
        int n ;
        vector<int>a[110] ;
        while(~scanf("%d",&n))
        {
            int m,h ;
            for(int i = 0 ; i < n ; i++)
            {
                scanf("%d",&m) ;
                a[i].clear() ;
                for(int j = 0 ; j < m ; j++)
                {
                    scanf("%d",&h) ;
                    a[i].push_back(h) ;
                }
            }
            int flag[110];
            for(int i = 0 ; i < 110 ; i++)
            flag[i] = 1 ;
            for(int i = 0 ; i < n ; i++)
            {
                for(int j = 0 ; j < n ; j++)
                {
                    if(i==j) continue;
                    if(contains(a[j],a[i]))
                    {
                        flag[j] = 0 ;
                        if(a[i].size() == a[j].size())
                        flag[i] = 0;
                    }
                }
            }
            for(int i = 0 ; i < n ; i++)
                if(flag[i]) cout<<"YES"<<endl;
                else cout<<"NO"<<endl ;
        }
        return 0 ;
    }
    View Code

    这个是二师兄写的非vector 的

    #include <algorithm>
    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <string>
    #define M 10010
    #define INF 1 << 30;
    
    using namespace std;
    
    int f[1010][1010];
    int main()
    {
        int n, i, j, m[M], k, t;
        int dp[1010];
        memset(dp , 0 , sizeof(dp));
        cin >>n;
        for(i = 0; i < n; i++)
        {
            cin >>m[i];
            for(j = 0; j < m[i]; j++)
                cin >>f[i][j];
            sort(f[i], f[i]+m[i]);
        }
        for(i = 0; i < n-1; i++)
        {
            for(j = i+1; j < n; j++)
            {
                if(m[i] >= m[j])
                {
                    t = 0;
                    for(k = 0; k < m[i]; k++)
                    {
                        if(f[i][k] == f[j][t])
                            t++;
                    }
                    if(t >= m[j])
                        dp[i] = 1;
                    if(m[j] == m[i] && t >= m[j])
                        dp[j] = 1;
                }
                else
                {
                    t = 0;
                    for(k = 0; k < m[j]; k++)
                        if(f[i][t] == f[j][k])
                            t++;
                    if(t >= m[i])
                        dp[j] = 1;
                }
            }
        }
        for(i = 0; i < n; i++)
        {
            if(!dp[i])
                cout <<"YES"<<endl;
            else
                cout <<"NO"<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    基于 Docker 的 MySQL 主从复制搭建
    获取 Docker 容器的 IP 地址
    Maven 学习资料
    docker 中,修改了 mysql 配置,如何重启 mysql?
    TiDB 学习资料
    Sharding-JDBC 学习资料
    Druid(数据库连接池) 学习资料
    JWT 学习资料
    Maven 拥有三套相互独立的生命周期:clean、default、site
    Maven 生命周期的阶段与插件的目标之间的绑定关系
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3463306.html
Copyright © 2020-2023  润新知