不想写Trie(或Hash)的往这看
sort+string::find函数
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
const int N = 10000 + 20;
string a[N];
int main()
{
int T;
cin >> T;
while (T--)
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
sort(a + 1, a + 1 + n);
bool flag = false;
for (int i = 1; i <= n - 1; i++)
{
if (a[i + 1].find(a[i]) == 0)
{
flag = true;
break;
}
}
if (flag)
{
cout << "NO" << endl;
}
else
{
cout << "YES" << endl;
}
}
}
你的做法是O(nlogn)的(有排序),trie的做法是O(n)的。
(如果你换成基数排序的话也可以O(n))
考试能过就行了,考到最短路你会去写斐波那契堆优化版本吗