CF 217 B. Berland Bingo

2024-02-05 21:40
文章标签 cf bingo 217 berland

本文主要是介绍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;elsecout <<"NO"<<endl;}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/luyingfeng/p/3463306.html

这篇关于CF 217 B. Berland Bingo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682251

相关文章

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int

【CF】E. Anya and Cubes(双向DFS)

根据题意的话每次递归分3种情况 一共最多25个数,时间复杂度为3^25,太大了 我们可以分2次求解第一次求一半的结果,也就是25/2 = 12,记录结果 之后利用剩余的一半求结果 s-结果 = 之前记录过的结果 就可以 时间复杂度降低为 3 ^ (n/2+1) 题目链接:http://codeforces.com/contest/525/problem/E #include<set

【CF】D. Arthur and Walls(BFS + 贪心)

D题 解题思路就是每次检查2X2的方格里是否只有一个‘*’,如果有的话这个*就需要变成‘.’,利用BFS进行遍历,入队的要求是这个点为. 一开始将所有的'.'全部加入队列,如果碰到一个'*'变成'.'就入队,判断的时候从4个方向就行判断 题目链接:http://codeforces.com/contest/525/problem/D #include<cstdio>#include<

CF#271 (Div. 2) D.(dp)

D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/474/problem/D We s

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There

CF#278 (Div. 2) A.(暴力枚举)

A. Giga Tower time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/A Giga To