Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- char ALPH[36] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b',
- 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
- 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
- typedef struct t_node{
- int CHILD[36];
- unsigned long long mask;
- }t_node;
- t_node m[5001];
- int last = 1;
- unsigned long long current = 0;
- char BUFF[5001];
- unsigned int HASH[200];
- FILE *f1,*f2;
- void out_tree(const int x)[ //unsigned long long x may be
- static int pos = 0;
- if (pos != 0){
- BUFF[pos] = '\0';
- fprintf(f2, "%s %d\n", BUFF, x-1);
- }
- for (unsigned int i = 0; i < 36; i++){
- if (((m[x].mask >> i) & 1ULL) == 1) {
- BUFF[pos++] = ALPH[i];
- out_tree(m[x].CHILD[i]);
- --pos;
- }
- }
- }
- int main() {
- f1 = fopen("input.txt", "r");
- f2 = fopen("output.txt", "w");
- unsigned int n, c;
- for (int i = 0; i < 36; ++i) {
- HASH[ALPH[i]] = i;
- }
- fscanf(f1, "%d", &n);
- unsigned int size;
- char buf[1024];
- while (!feof(f1)){
- size = fread(buf, 1, 1024, f1); //may be in reading
- for (int i = 0; i < size; i++){
- if (isalnum(buf[i])) {
- if (last - 1 == n) {
- m[0].mask = 0ULL;
- current = 0;
- last = 1;
- }
- if (buf[i] == EOF) break;
- buf[i] = tolower(buf[i]);
- c = HASH[buf[i]];
- if ((((m[current].mask) >> c) & 1ULL) == 0) {
- (m[current].mask) |= (1ULL << c);
- m[current].CHILD[c] = last;
- m[last].mask = 0ULL;
- ++last;
- current = 0;
- } else {
- current = m[current].CHILD[c];
- }
- }
- }
- }
- out_tree(0);
- fclose(f1);
- fclose(f2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement