当前位置: 代码迷 >> 综合 >> 杭电oj 1251 统计难题【Trie树板子题】
  详细解决方案

杭电oj 1251 统计难题【Trie树板子题】

热度:76   发布时间:2023-12-29 17:37:19.0

杭电oj:1251 统计难题

刚开始学习字典树感觉挺不能理解的,多看看博客就懂得差不多了吧,如果你还是不理解,建议跟着程序走一遍数据,就可以理解了,Trie树是经典的数据结构,竞赛很实用。
此题是Trie的板子题,没啥卡的评测点,可以一遍AC;

AC代码:

#include <bits/stdc++.h>
using namespace std;#define Base 'a'int Trie[1000010][26];
int num[1000010];int ans = 1;void Insert(string s)
{int i, c = 0;for(int i = 0; i<s.length(); i++){int n = s[i] - Base;if(Trie[c][n] == 0){Trie[c][n] = ans++;}c = Trie[c][n];num[c]++;}
}int Find(string s)
{int c = 0;for(int i = 0; i<s.length(); i++){int n = s[i] - Base;if(Trie[c][n] == 0)return 0;c = Trie[c][n];}return num[c];
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string s;while(getline(cin, s)){if(s.length() == 0)break;Insert(s);}while(getline(cin, s)){cout<<Find(s)<<endl;}return 0;
}