版权声明:沃斯里德小浩浩啊 https://blog.csdn.net/Healer66/article/details/82917904
题意:
模拟final的选队规则。
思路:
y从小到大枚举,因为最大才20,判断该大学如果没被选上,输出对应y,如果都满足。输出advanced!
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
typedef long long ll;
set<string> ss;
vector<string> tmp;
vector<string> v[6];
int main()
{
int T,G,cnt = 1;
string name;
cin>>T;
while(T--)
{
int flag = 1;
ss.clear();
tmp.clear();
for(int i = 0; i<6; i++)
v[i].clear();
cin>>G>>name;
for(int i = 0; i<6; i++)
{
string t;
for(int j = 1; j<=20; j++)
{
cin>>t;
v[i].push_back(t);
}
}
for(int y = 0; y <= G; y++)
{
ss.clear();
int sum=0;
int x = G-y;
int f=0;
while(sum<x)
{
for(int i=0; i<5; i++)
{
if(ss.find(v[i][f])==ss.end())
{
ss.insert(v[i][f]);
sum++;
}
if(sum==x)
break;
}
f++;
}
while(sum<G)
{
for(int i=0; i < 20; i++)
{
if(ss.find(v[5][i])==ss.end())
{
ss.insert(v[5][i]);
sum++;
}
if(sum==G)
break;
}
}
if(ss.find(name)==ss.end())
{
printf("Case #%d: %d\n",cnt++,y);
flag=0;
break;
}
}
if(flag)
printf("Case #%d: ADVANCED!\n",cnt++);
}
return 0;
}