| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:求助:Trie树WA了In Reply To:求助:Trie树WA了 Posted by:ravenclaw at 2019-08-14 18:56:45 > #include <iostream>
> #include <iomanip>
> #include <cstdio>
> #include <cstring>
> #include <algorithm>
> #include <cmath>
> #include <vector>
> #include <set>
> #include <queue>
> #include <map>
> #include <stack>
> #include <deque>
> #include <list>
> #include <cassert>
> #if __cplusplus >= 201103L
> #include <unordered_map>
> #include <unordered_set>
> #endif
> using namespace std;
> #define pb push_back
> #define mp make_pair
> #ifdef GRAPH
> typedef pair <int, int> Edge;
> #define v first
> #define w second
> #endif
> #define lsh(i) (1 << (i))
> #define lshll(i) (1LL << (i))
> #define rep(i, n) for (int (i) = 0; (i) < n; (i)++)
> #define until(x) while (!x)
> #define fail(s) assert(!s)
> const int INF = 0x3f3f3f3f;
> const long double EPS = 1e-6;
> const int N = 1010, C = 27;
> struct TrieNode {
> int dest[C];
> int terminate;
> TrieNode() {
> memset(dest, 0, sizeof(dest));
> terminate = 0;
> }
> };
> TrieNode Trie[90 * N];
> int root = 0, tot = 1;
> void TrieInsert(string s, int xx) {
> int x = root;
> for (int i = 0; i < (int)s.length(); i++) {
> int p = s[i] - 'a';
> if (!Trie[x].dest[p])Trie[x].dest[p] = ++tot;
> x = Trie[x].dest[p];
> }
> Trie[x].terminate = xx;
> }
> int TrieFind(string s) {
> int x = root;
> for (int i = 0; i < (int)s.length(); i++) {
> int p = s[i] - 'a';
> if (!Trie[x].dest[p])return -1;
> x = Trie[x].dest[p];
> }
> return Trie[x].terminate;
> }
> int n;
> string start;
> string s[N];
> int vis[N];
> vector <int> G[N];
> void BFS() {
> queue <int> q;
> q.push(0);
> vis[0] = true;
> while (!q.empty()) {
> int u = q.front();
> q.pop();
> for (vector <int> :: iterator it = G[u].begin(); it != G[u].end(); it++) {
> int v = *it;
> if (vis[v]) continue;
> vis[v] = true;
> q.push(v);
> }
> }
> }
> int main() {
> ios::sync_with_stdio(false);
> cin >> n >> start;
> TrieInsert(start, 0);
> for (int i = 1; i <= n; i++) {
> cin >> s[i];
> if (s[i].length() > 3)
> TrieInsert(s[i], i);
> }
> for (int i = 1; i <= n; i++) {
> string now = s[i];
> for (int j = 0; j < (int)now.length(); j++) {
> now.erase(now.begin() + j);
> cerr << now << endl;
> int x = TrieFind(now);
> if (x != -1) {
> G[x].pb(i);
> cerr << x << ' ' << i << endl;
> }
> now = s[i];
> }
> }
> BFS();
> int besti = 0, bestv = -1;
> for (int i = 0; i <= n; i++) {
> if (vis[i] == 1 && ((int)s[i].length() > bestv)) {
> bestv = s[i].length();
> besti = i;
> }
> }
> cout << s[besti] << endl;
> return 0;
> }
过了
原因在这组数据上
3 qwq
chtholly
nephren
ithea
输出qwq
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator