ACM模版
描述
题解
简单的模拟题,题意不是特别容易翻译,但是模拟的规则十分简单,和 WFWF 晋级资格相似,大致是一共 X Y=GX Y = G 个名额,其中 XX 分给中国五个区域赛,YY 个分给 ECFinalECFinal,先考虑五个区域赛的每个赛区的五个第一名、五个第二名、五个第三名……其中重复的只算一次,凑够 XX 个,然后在 ECFinalECFinal 中选前若干名去除和前边五个赛区重复的,凑够 YY 个,一共 GG 个。其中,有一个询问一个学校参加 WFWF 的可能情况。
如果没有任何一种 (X,Y)(X, Y) 组合可以使其进入 WFWF 则输出 ADVANCED!ADVANCED!,否则输出最小的 YY 使其无法进入 WFWF 的 YY 值。
代码
代码语言:javascript复制#include <cstdio>
#include <cmath>
#include <set>
#include <iostream>
using namespace std;
const int MAXN = 6;
const int MAXM = 21;
const int MAXB = 100;
int G;
string S;
string ECsite[MAXM];
string RGsite[MAXN][MAXM];
set<string> st;
int main()
{
int T;
scanf("%d", &T);
for (int ce = 1; ce <= T; ce )
{
cin >> G >> S;
for (int i = 1; i < MAXN; i )
{
for (int j = 1; j < MAXM; j )
{
cin >> RGsite[i][j];
}
}
for (int j = 1; j < MAXM; j )
{
cin >> ECsite[j];
}
int pos, cnt, y = -1;
for (int x = 0; x <= G; x )
{
st.clear();
bool staX = false, staY = false;
if (x > 0)
{
for (int r = 1; r <= MAXB; r )
{
pos = r % 5;
if (pos == 0)
{
pos = 5;
}
cnt = (int)ceil(r / 5.0);
if (RGsite[pos][cnt] == S)
{
staX = 1;
}
st.insert(RGsite[pos][cnt]);
if (st.size() >= x)
{
break;
}
}
}
if (G - x > 0)
{
for (int j = 1; j < MAXM; j )
{
if (ECsite[j] == S)
{
staY = 1;
}
st.insert(ECsite[j]);
if (st.size() >= G)
{
break;
}
}
}
if (!staX && !staY)
{
y = G - x;
}
}
printf("Case #%d: ", ce);
if (y == -1)
{
printf("ADVANCED!n");
}
else
{
printf("%dn", y);
}
}
return 0;
}