HDU-6008-Worried School

来源:互联网 发布:照片白边框软件 编辑:程序博客网 时间:2024/06/05 02:42

ACM模版

描述

描述

题解

简单的模拟题,题意不是特别容易翻译,但是模拟的规则十分简单,和 WF 晋级资格相似,大致是一共 X+Y=G 个名额,其中 X 分给中国五个区域赛,Y 个分给 ECFinal,先考虑五个区域赛的每个赛区的五个第一名、五个第二名、五个第三名……其中重复的只算一次,凑够 X 个,然后在 ECFinal 中选前若干名去除和前边五个赛区重复的,凑够 Y 个,一共 G 个。其中,有一个询问一个学校参加 WF 的可能情况。

如果没有任何一种 (X,Y) 组合可以使其进入 WF 则输出 ADVANCED!,否则输出最小的 Y 使其无法进入 WFY 值。

代码

#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("%d\n", y);        }    }    return 0;}
原创粉丝点击