填词

Alex喜欢填词游戏。填词是游戏是一个非常简单的游戏。填词游戏包括一个N * M大小的矩形方格盘和P个单词。玩家需要把每个方格中填上一个字母使得每个单词都能在方格盘上找到。每个单词都能找到要满足下面的条件:

每个方格都不能同时属于超过一个的单词。一个长为k的单词一定要占据k个方格。单词在方格盘中出现的方向只能是竖直的或者水平的。

你的任务是首先在方格盘上找到所有的单词,当然在棋盘上可能有些方格没有被单词占据。然后把这些没有用的方格找出来,把这些方格上的字母按照字典序组成一个“神秘单词”。

如果你还不了解规则,我们可以具一个例子,比如在下图中寻找单词BEG和GEE。

输入

输入的第一行包括三个整数N,M和P (2 <= M, N <= 10, 0 <= P <=100)。接下来的N行,每行包括M个字符,来表示方格盘。接下来P行给出需要在方格盘中找到的单词。

输入保证填词游戏至少有一组答案。

输入中给出的字母都是大写字母。

输出

输出“神秘单词”,注意“神秘单词”中的字母要按照字典序给出。

样例输入

3 3 2
EBG
GEE
EGE
BEG
GEE

样例输出

EEG

题目中没有写P个单词的字符长度,因此不一定是M。

字典排序,26个字母,有谁加谁,单词中有谁减谁。

#include<iostream>
using namespace std;
int main() {
	int arr[26] = {0};
	int N, M, P;
	cin >> N >> M >> P;
	char *zifu = new char[M];
	
	for (int i = 0; i < N; i++)
	{
		cin >> zifu;
		for (int j = 0; j < M; j++)
		{
			arr[zifu[j] - 'A'] += 1;
		}
	}
	for (int i = 0; i < P; i++)
	{
		char yanzhneg[200];
		cin >> yanzhneg;
		for (int j = 0; yanzhneg[j]!=0; j++)
		{
			arr[yanzhneg[j] - 'A'] -= 1;
		}
	}

	
	for (int i = 0; i < 26; i++)
	{
		if (arr[i] != 0)
		{
			for (int j = 0; j < arr[i]; j++)
			{
				cout << char('A' + i);
			}
		}
	}
	cout << endl;
	system("pause");
}

猜你喜欢

转载自blog.csdn.net/qq_15046309/article/details/81122350