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

📄 pku2705.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 CPP
字号:
#include <stdio.h>
#include <string.h>

int ID[110];
int L;
int T;

int fall()
{
	int i, b, cnt;
	i = L - 1;
	cnt = 0;
	while (i >= 0 && ID[i] == -1)
		i--;
	b = ID[i];
	while (i >= 0 && ID[i] == b)
	{
		ID[i] = -1;
		cnt++;
		i--;
	}
	return cnt;
}

int checkright(int width)
{
	int i, cnt;
	cnt = 0;
	for (i = 0; i < L; i++)
	{
		if (ID[i] == -1)
			cnt++;
	}
	while (cnt < width)
	{
		cnt += fall();
	}
	cnt = 0;
	for (i = 0; i < L && cnt < width; i++)
	{
		if (ID[i] == -1)
			cnt++;
	}
	return i;
}

void remove(int id)
{
	int i;
	for (i = 0; i < L; i++)
	{
		if (ID[i] == id)
			ID[i] = -1;
	}
}

void Solve()
{
	char M[3];
	int id, width, i, j;
	int r;
	int tt = 0;
	memset(ID, -1, sizeof(ID));
	while (1)
	{
		scanf("%s", M);
		if (M[0] == 'E')
		{
			break;
		}
		else if (M[0] == 'A')
		{
			scanf("%d %d", &id, &width);
			r = checkright(width) - 1;
			for (i = r, j = r; i >= 0; i--)
			{
				if (ID[i] != -1)
					ID[j--] = ID[i];
			}
			for (i = 0; i < width; i++)
			{
				ID[i] = id;
			}
		}else if (M[0] == 'R')
		{
			scanf("%d", &id);
			remove(id);
		}
	}
	printf("PROBLEM %d:", ++T);
	for (i = 0; i < L; i++)
	{
		if (ID[i] != -1 && (i == 0 || (i > 0 && ID[i] != ID[i - 1])))
		{
			printf(" %d", ID[i]);
		}
	}
	printf("\n");
}

int main()
{
	T = 0;
	while (EOF != scanf("%d", &L))
	{
		if (L == -1)
			break;
		Solve();
	}
	return 0;
}

⌨️ 快捷键说明

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