KTV

2274 ワード

KTV時間制限:C/C++言語1000 MS;その他言語3000 MSメモリ制限:C/C++言語65536 KB;他の言語589824 KBテーマの説明:n人がカラオケに行って歌を歌って、誰もが自分が歌いたい歌を持っています.このカラオケボックスは各部屋にx個のマイクしかないことが知られており、同じ歌は同時に複数人で歌うことができるが、同時に歌う人はx人を超えてはならず、同じ時刻に1曲しか歌えない.全部でy曲の时間しかありません.すべての人が歌いたい歌が終わったり、y曲が終わったりすると、彼らは離れます.彼らは最良の手配策の下で(一人一人ができるだけ自分の歌いたい歌を歌わせたい)、彼らが離れたときに歌いたい歌があるかどうかを知りたいと思っています.入力は誰もが歌いたい歌が違うことを保証します.1行目の整数Tを入力し、テストのデータグループ数1≦T≦10を表す.各グループのテストデータに対して、第1行の3つの整数n、x、y、意味は問題面を見て、1≦n≦100、1≦x≦100、1≦y≦1000;次に、n行は、1行目からn番目の個人が歌いたい曲を上から下の順にそれぞれ与え、そのうち、各行の先頭に1つの整数a[i]はi番目の個人が歌いたい数を表し、後にa[i]個の整数は、曲番号1≦a[i]≦10を表す.KTVのオプション曲の総数は1000を超えない.つまり、番号は1000を超えない.出力は各テストデータについて、「YES」を出力し、離れたときに歌が歌い終わっていない人がいることを示し、そうでなければ「NO」を出力します.(引用符は含まれません).
サンプル入力1 3 3 3 1 2 1 3 4サンプル出力YES
Hint入力サンプル2:2 1 1 1 1 2 2 2 1 1 1 1 1 1 1出力サンプル2:NO YES
#include  
using namespace std;
int main()
{
    int caseCnt;
    while (scanf("%d", &caseCnt) != EOF)
    {
        for (int j = 0; j < caseCnt; ++j)
        {
            unordered_map songToSing;
            int personCnt, mCnt, songCnt;
            scanf("%d%d%d", &personCnt, &mCnt, &songCnt);
            for (int i = 0; i < personCnt; ++i)
            {
                int psCnt;
                scanf("%d", &psCnt);
                for (int j = 0; j < psCnt; ++j)
                {
                    int sId;
                    scanf("%d", &sId);
                    songToSing[sId - 1]++;
                }
            }
            for (auto kv : songToSing)
            {
                while (kv.second > 0 && songCnt > 0)
                {
                    int left = kv.second - min(personCnt, mCnt);
                    songToSing[kv.first] = left;
                    kv.second = left;
                    songCnt--;
                }
            }
            bool done = true;
            for (auto kv : songToSing)
            {
                if (kv.second > 0)
                {
                    done = false;
                    break;
                }
            }
            if (done)
                printf("YES
"); else printf("NO
"); } } return 0; }