题目

源地址:

http://poj.org/problem?id=1318

理解

一开始的思路有点偏,想要单纯的使用string类的compare函数来解决问题。但是稍微考虑一下之后发现,复杂度有点高。事实上,我根本就不需要知道它们是不是匹配,只要排序之后匹配即可。

代码

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define MAX 105

string dic[MAX], out[MAX], tmp;
int n, i;
int flag;

int main(int argc, char const *argv[])
{
    while (cin >> dic[i] && dic[i][0] != 'X')  i++;
    sort(dic, dic + i);
    n = i;
    for (i = 0; i < n; i++)
    {
        out[i] = dic[i];
        sort(dic[i].begin(), dic[i].end());
    }
    while (cin >> tmp)
    {
        if (tmp[0] == 'X')   break;
        flag = 0;
        sort(tmp.begin(), tmp.end());
        for (i = 0; i < n; i++)
        {
            if (tmp == dic[i])
            {
                flag = 1;
                cout << out[i] << endl;
            }
        }
        if (flag == 0)
            cout << "NOT A VALID WORD" << endl;
        cout << "******" << endl;
    }
    return 0;
}

更新日志

  • 2014年07月23日 已AC。