⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pku2584.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
int path[21][110];
int down[21], up[21];
int size[110];
int v[110];
int match[110];
int N, M;

int CalcSize(char c)
{
	if (c == 'S')
		return 0;
	else if (c == 'M')
		return 1;
	else if (c == 'L')
		return 2;
	else if (c == 'X')
		return 3;
	else if (c == 'T')
		return 4;
}

int DFS(int p)
{
	int t, i;
	for (i = 0; i < M; i++)
	{
		if (path[p][i] && !v[i])
		{
			v[i] = 1;
			t = match[i];
			match[i] = p;
			if (t == -1 || DFS(t))
				return 1;
			match[i] = t;
		}
	}
	return 0;
}

int main()
{
	char s[15];
	int i, x, j;
	while (EOF != scanf("%s", s))
	{
		if (!strcmp(s, "ENDOFINPUT"))
			break;
		scanf("%d", &N);
		for (i = 0; i < N; i++)
		{
			scanf("%s", s);
			down[i] = CalcSize(s[0]);
			up[i] = CalcSize(s[1]);
		}
		M = 0;
		for (i = 0; i < 5; i++)
		{
			scanf("%d", &x);
			for (j = 0; j < x; j++)
				size[j + M] = i;
			M += x;
		}
		memset(path, 0, sizeof(path));
		for (i = 0; i < N; i++)
		{
			for (j = 0; j < M; j++)
			{
				if (size[j] >= down[i] && size[j] <= up[i])
					path[i][j] = 1;
			}
		}
		memset(match, -1, sizeof(match));
		for (i = 0; i < N; i++)
		{
			memset(v, 0, sizeof(v));
			if (!DFS(i))
				break;
		}
		scanf("%s", s);
		printf("%s\n", i == N ? "T-shirts rock!" : "I'd rather not wear a shirt anyway...");
	}	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -