随笔分类 - 字符串
摘要:View Code class trie{public: int num; trie *child[26]; trie() { num=0; memset(child,0,sizeof(child)); }}root;int insert(char *s){ class trie *cur=&root; int len=strlen(s); for(int i=0;i<len;i++) { int id=s[i]-'a'; if(!cur->child[id]) ...
阅读全文
摘要:提交了很多次,不想多说了第一种方法非常暴力View Code #include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;int num,tot;int cnt[2011];int map[2011][2011];char dic[2011][20];struct node{ char s[20];}ans[2011];bool cmp(node a,node b){ return strcmp(a.s,b.s)<0;
阅读全文
摘要:跟上一道题差不多,拆分单词,这里是不断把后缀加进字典树,但要注意同一个字母的两个或两个以上相同前缀只能算一个,所以在插入时要多传入一个参数记录传入字符串所属单词的编号,如果某个节点上一次也是由这个单词产生的,则只记一次就好View Code #include<stdio.h>#include<string.h>#include<math.h>class trie{public: int num; int pre; trie *child[26]; trie() { num=0; pre=-1; memset(child,0...
阅读全文
摘要:任务:输出所有可以由其他两个单词组成的单词如题目中的ahat有a和hat组成做法:建立好字典树后拆分单词,把单词分成两段,再在字典树中查找这两段单词是否存在,如果存在就输出,注意输出后要break掉,就这样。View Code #include<stdio.h>#include<string.h>#include<math.h>class trie{public: bool flag; trie *child[26]; trie() { flag=false; memset(child,0,sizeof(child)); }}root;...
阅读全文
摘要:简单的字典树的应用View Code #include<stdio.h>#include<string.h>char s[15];class trie{public : int num; trie* child[27]; trie() { num=0; memset(child,0,sizeof(child)); }}root;void insert(char *s){ class trie *cur=&root; int len=strlen(s); for(int i=0;i<len;i++) { ...
阅读全文
摘要:很多的错误,狂交了几十遍,哈哈~最后总结如下:RE:数组越界WA:字母拼错建trie树之后再加一个并查集,用来查询图是否连通以及很方便的记录每个点的度数View Code //runtime error 的原因:初始化的时候从1到MAX赋值,数组越界,牢记啊!!!//WA原因: Impossible拼错。。囧!#include<stdio.h>#include<string.h>#include<stdlib.h>#include<iostream>using namespace std;const int MAX = 500010;class
阅读全文
摘要:输入有点繁琐View Code #include<stdio.h>#include<string.h>#include<stdlib.h>struct node { struct node *child[26]; char *str;}*root;void insert(char *c1,char *c2){ int len=strlen(c2); struct node *cur,*newnode; cur=root; for(int i=0;i<len;i++) { if(cur->child[c2[i]-'a']!=0) .
阅读全文
摘要:View Code #pragma warning (disable : 4786)#include<stdio.h>#include<map>#include<string>#include<iostream>using namespace std;int main(){ char str[50]; double num=0; map<string,int> M; while(gets(str)!=NULL) { M[str]++; num++; } map<string,int>::iterator it; for..
阅读全文
摘要:一觉醒来,不觉已经是4点了,于是果断挑了一道水题。View Code #include<stdio.h>#include<string.h>#include <cctype>char str[5000];int main(){ int i,j,k; while(gets(str)) { char s[]="0000"; int len=strlen(str); int row=len/16; int left=len%16; int a=0; for(i=0;i<row;i++) ...
阅读全文

浙公网安备 33010602011771号