Today is the first game selected by the school Province. It won't be able to win A job, but WAF has been in TES1.
After the competition, we found that freopen ("input.txt", "r", stdin); freopen ("output.txt", "w", stdout );......
I handed in the Accepted ...... Troubles !!!!! It's a lesson.
Question
Descriptioninputinput.txtoutputoutput.txtOverall there are m actors in Berland. Each actor has a personal identifier — an integer from 1 to m (distinct actors have distinct identifiers). Vasya likes to watch Berland movies with Berland actors, and he has k favorite actors. He watched the movie trailers for the next month and wrote the following information for every movie: the movie title, the number of actors who starred in it, and the identifiers of these actors. Besides, he managed to copy the movie titles and how many actors starred there, but he didn't manage to write down the identifiers of some actors. Vasya looks at his records and wonders which movies may be his favourite, and which ones may not be. Once Vasya learns the exact cast of all movies, his favorite movies will be determined as follows: a movie becomes favorite movie, if no other movie from Vasya's list has more favorite actors.Help the boy to determine the following for each movie:whether it surely will be his favourite movie;whether it surely won't be his favourite movie;can either be favourite or not.InputThe first line of the input contains two integers m and k (1 ≤ m ≤ 100, 1 ≤ k ≤ m) — the number of actors in Berland and the number of Vasya's favourite actors.The second line contains k distinct integers ai (1 ≤ ai ≤ m) — the identifiers of Vasya's favourite actors.The third line contains a single integer n (1 ≤ n ≤ 100) — the number of movies in Vasya's list.Then follow n blocks of lines, each block contains a movie's description. The i-th movie's description contains three lines: the first line contains string si (si consists of lowercase English letters and can have the length of from 1 to 10 characters, inclusive) — the movie's title, the second line contains a non-negative integer di (1 ≤ di ≤ m) — the number of actors who starred in this movie,the third line has di integers bi, j (0 ≤ bi, j ≤ m) — the identifiers of the actors who star in this movie. If bi, j = 0, than Vasya doesn't remember the identifier of the j-th actor. It is guaranteed that the list of actors for a movie doesn't contain the same actors.All movies have distinct names. The numbers on the lines are separated by single spaces.OutputPrint n lines in the output. In the i-th line print: 0, if the i-th movie will surely be the favourite; 1, if the i-th movie won't surely be the favourite; 2, if the i-th movie can either be favourite, or not favourite. Sample InputInput5 31 2 36firstfilm30 0 0secondfilm40 0 4 5thirdfilm12fourthfilm15fifthfilm14sixthfilm21 0Output221112Input5 31 3 54jumanji30 0 0theeagle51 2 3 4 0matrix32 4 0sourcecode22 4Output2011HintNote to the second sample: Movie jumanji can theoretically have from 1 to 3 Vasya's favourite actors. Movie theeagle has all three favourite actors, as the actor Vasya failed to remember, can only have identifier 5. Movie matrix can have exactly one favourite actor. Movie sourcecode doesn't have any favourite actors. Thus, movie theeagle will surely be favourite, movies matrix and sourcecode won't surely be favourite, and movie jumanji can be either favourite (if it has all three favourite actors), or not favourite.
The question is very tangled ~ But in general, it is clear.
The idea is:
1. If the best condition of a movie is worse than that of other movies, the movie is definitely not the best, that is, the State is 1.
2. Judge that if a movie does not meet the best conditions of other movies, it is not necessarily the best, that is, the State is 2.
3. The rest is the best.
It's special ~ The key lies in the fact that it is definitely not the best, not necessarily the best.
/*************************************** **************************************** // * OS: 3.2.0-58-generic # 88-Ubuntu SMP Tue Dec 3 UTC 2013 GNU/Linux * Compiler: g ++ (GCC) 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) * Encoding: UTF8 * Date: 2014-04-01 * All Rights Reserved by yaolong. **************************************** *************************************//* description: ************************** **************************************** **************************************** ********************************** // * Analysis: **************************************** **************************************** **************************************** ***********************//*************** **************************************** * *********************/# include <iostream> # include <cstdio> # include <cstrin G >#include <vector >#include <cmath> using namespace std; class Movie {public: string name; int num; int stat; int like; int hate; int zero; vector <int> act; Movie () {}; void resiz () {act. resize (num) ;}}; int main () {freopen ("input.txt", "r", stdin); freopen ("output.txt", "w", stdout ); int cases = 0; int m, k, mov_num, I, j, tmp; int fav [120]; vector <Movie> mv; while (cin> m> k) {memset (fav, 0, sizeof (fav); for (I = 0; I <k; I ++) {cin> tmp; fav [tmp] = 1;} cin> mov_num; mv. clear (); mv. resize (mov_num); for (I = 0; I <mov_num; I ++) {cin> mv [I]. name; cin> mv [I]. num; mv [I]. resiz (); for (j = 0; j <mv [I]. num; j ++) {cin> mv [I]. act [j] ;}} int maxlike =-1; int minlike =-1; for (I = 0; I <mov_num; I ++) {mv [I]. zero = 0; mv [I]. hate = 0; mv [I]. like = 0; for (j = 0; j <mv [I]. act. size (); j ++) {// count the number of 0 if (mv [I]. act [j] = 0) {mv [I]. zero ++;} else {If (fav [mv [I]. act [j]) {mv [I]. like ++;} else {mv [I]. hate ++ ;}}}for (I = 0; I <mov_num; I ++) {int tmpbest = mv [I]. like + min (mv [I]. zero, k-mv [I]. like); // The best case is int tmpworst = mv [I]. like + max (0, mv [I]. zero-(m-k-mv [I]. hate); // The Worst Case int cnt = 0; for (j = 0; j <mov_num; j ++) {if (I! = J) {if (tmpbest <mv [j]. like + max (0, mv [j]. zero-(m-k-mv [j]. hate) {mv [I]. stat = 1; // It is definitely not the best break if the best one is greater than the smallest one. }}for (j = 0; j <mov_num & mv [I]. stat! = 1; j ++) {if (I! = J) {if (tmpworst <mv [j]. like + min (mv [j]. zero, k-mv [j]. like) {mv [I]. stat = 2; // if the worst condition is greater than the others, this is definitely not the best one! At the same time, it is not the worst, so it is an uncertain break;} mv [I]. stat = mv [I]. stat> = 1? Mv [I]. stat: 0; // if it is not determined to be the best or unconfirmed, It is the rightmost} for (I = 0; I <mov_num; I ++) {cout <mv [I]. stat <endl ;}} return 0 ;}