标签:name 字符 操作 href string 模拟 顺序 很多 --
引用书籍:《算法竞赛入门到进阶》清华大学出版社
#include<bits/stdc++.h>
using namespace std;
int main(){
char str[12];
map<string, int>m;
while(fgets(str, 12, stdin)){ //也可以使用gets函数读入字符串,循环体的内容需要做微小的改动
int len = strlen(str);
if(len==1) break;
for(int i=len-1; i>0; i--){
str[i] = '\0';
m[str]++;
}
}
while(~scanf("%s",str)) printf("%d\n",m[str]);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e4 + 10;
int tire[maxn*10][26];
int book[maxn*10];
int cnt;
void Insert(char *str){
int len = strlen(str);
int root = 0;
for(int i=0; i<len; i++){
int id = str[i] - 'a';
if(!tire[root][id]) tire[root][id] = ++cnt;
root = tire[root][id];
book[root]++;
}
}
int Find(char *str){
int len = strlen(str);
int root = 0;
for(int i=0; i<len; i++){
int id = str[i] - 'a';
if(!tire[root][id]) return 0;
root = tire[root][id];
}
return book[root];
}
int main(){
cnt = 0;
memset(tire, 0, sizeof(tire));
memset(book, 0, sizeof(book));
char str[12];
while(gets(str)){
if(!strlen(str)) break;
Insert(str);
}
while(gets(str)) printf("%d\n",Find(str));
return 0;
}
#include<bits/stdc++.h>
using namespace std;
struct Trie{
Trie * next[26];
int num;
Trie(){
for(int i=0; i<26; i++) next[i] = NULL;
num = 0;
}
};
Trie root;
void Insert(char *str){
int len = strlen(str);
Trie *p = &root;
for(int i=0; i<len; i++){
int id = str[i] - 'a';
if(p->next[id] == NULL)
p->next[id] = new Trie;
p = p->next[id];
p->num++;
}
}
int Find(char *str){
Trie *p = &root;
for(int i=0; str[i]; i++){
int id = str[i] - 'a';
if(p->next[id] == NULL)
return 0;
p = p->next[id];
}
return p->num;
}
int main(){
char str[12];
while(gets(str)){
if(!strlen(str)) break;
Insert(str);
}
while(gets(str)) printf("%d\n",Find(str));
return 0;
}
标签:name 字符 操作 href string 模拟 顺序 很多 --
原文地址:https://www.cnblogs.com/sdutzxr/p/12430994.html