CSES - E4590 2016 6 - Results
Submission details
Task:Bless You Autocorrect
Sender:eax511
Submission time:2016-10-22 15:29:11 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.03 sdetails
#2ACCEPTED0.09 sdetails
#3ACCEPTED0.10 sdetails
#4ACCEPTED0.07 sdetails
#5ACCEPTED0.29 sdetails
#6ACCEPTED0.29 sdetails
#7ACCEPTED0.06 sdetails
#8ACCEPTED0.09 sdetails
#9ACCEPTED0.12 sdetails
#10ACCEPTED0.14 sdetails
#11ACCEPTED0.13 sdetails
#12ACCEPTED0.10 sdetails
#13ACCEPTED0.07 sdetails
#14ACCEPTED0.04 sdetails
#15ACCEPTED0.06 sdetails
#16ACCEPTED0.04 sdetails
#17ACCEPTED0.08 sdetails
#18ACCEPTED0.05 sdetails
#19ACCEPTED0.06 sdetails

Compiler report

input/code.cpp: In member function 'void node::insert(const char*)':
input/code.cpp:15:13: warning: array subscript has type 'char' [-Wchar-subscripts]
     if(!p[*s])(p[*s]=nodes+(++np))->p[28]=this,p[*s]->l=1010101;
             ^
input/code.cpp:15:20: warning: array subscript has type 'char' [-Wchar-subscripts]
     if(!p[*s])(p[*s]=nodes+(++np))->p[28]=this,p[*s]->l=1010101;
                    ^
input/code.cpp:15:52: warning: array subscript has type 'char' [-Wchar-subscripts]
     if(!p[*s])(p[*s]=nodes+(++np))->p[28]=this,p[*s]->l=1010101;
                                                    ^
input/code.cpp:16:9: warning: array subscript has type 'char' [-Wchar-subscripts]
     p[*s]->insert(s+1);
         ^
input/code.cpp: In member function 'void node::shortcut(const char*)':
input/code.cpp:19:21: warning: array subscript has type 'char' [-Wchar-subscripts]
     node* v = p[*s++];
                     ^
input/code.cpp:20:35: warning: array subscript has type 'char' [-Wchar-sub...

Code

#include <string>
#include <iostream>
#include <queue>
using namespace std;
int np=0;
struct node;
node* nodes;
char prefix[1010101];
struct node{
  node* p[29];
  int l;
  bool trav;
  void insert(const char* s){
    if(!*s)return;
    if(!p[*s])(p[*s]=nodes+(++np))->p[28]=this,p[*s]->l=1010101;
    p[*s]->insert(s+1);
  }
  void shortcut(const char* s){
    node* v = p[*s++];
    while(*s&&v->p[27])v=v->p[*s++];
    if(!*s&&v->p[27])return;
    node* k=v;
    const char* sv=s;
    while(*s)k=k->p[*s++];
    s=sv;
    while(*s)v->p[27]=k,v=v->p[*s++];
    k->p[27]=k;
  }
  void bfs(){
    queue<node*> q;
    q.emplace(this);
    l=0;
    while(!q.empty()){
      node* v = q.front();
      q.pop();
      for(int i=0;i<29;++i)if(v->p[i]&&v->p[i]->l>v->l+1)v->p[i]->l=v->l+1,q.push(v->p[i]);
    }
  }
  int search(const char* s){
    node* v=this;
    while(*s&&v->p[*s])v=v->p[*s++];
    int n=v->l;
    while(*s)++n,++s;
    return n;
  }
  void traverse(int j){
    if(trav)return;
    trav=true;
    cout<<this<<':'<<prefix<<": "<<l<<";";
    for(int i=0;i<27;++i){
      prefix[j]=i+'a'-1;
      if(p[i])cout<<' '<<prefix;
    }
    cout<<' '<<p[27]<<' '<<p[28]<<'\n';
    for(int i=0;i<29;++i){
      prefix[j]=i+'a'-1;
      if(p[i])p[i]->traverse(j+1);
    }
    prefix[j]=0;
  }
};
void map(std::string& s){for(auto& it : s)it-='a'-1;}
node nodes_[1010101];
int main(){
  nodes=nodes_;
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n,m;
  cin>>n>>m;
  string v;
  while(n--)cin>>v,map(v),nodes[0].insert(v.c_str()),nodes[0].shortcut(v.c_str());
  nodes[0].bfs();
  while(m--)cin>>v,map(v),cout<<nodes[0].search(v.c_str())<<'\n';
  prefix[0]='@';
  //nodes[0].traverse(1);
  return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
8 6
prog
program
xyz
horses
...

correct output
4
2
8
3
6
...

user output
4
2
8
3
6
...

Test 2

Verdict: ACCEPTED

input
834 1
a
aaaa
aaaaaaa
aaaaaaaaaa
...

correct output
1667

user output
1667

Test 3

Verdict: ACCEPTED

input
721 1
aaaab
aaaaaaaab
aaaaaaaaaaaab
aaaaaaaaaaaaaaaab
...

correct output
2163

user output
2163

Test 4

Verdict: ACCEPTED

input
1445 1
a
aa
aaa
aaaa
...

correct output
1445

user output
1445

Test 5

Verdict: ACCEPTED

input
1 1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
349500

user output
349500

Test 6

Verdict: ACCEPTED

input
1 1
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
349500

user output
349500

Test 7

Verdict: ACCEPTED

input
862 71432
eeeaetaate
aeaaatta
tatataeta
eeaeaee
...

correct output
6
5
9
8
11
...

user output
6
5
9
8
11
...

Test 8

Verdict: ACCEPTED

input
36155 27654
enohtteheo
ttattths
eeeoeeessthitihsai
eeeoeeesenteniieitai
...

correct output
7
15
11
18
16
...

user output
7
15
11
18
16
...

Test 9

Verdict: ACCEPTED

input
85851 21958
sstteseeta
inotttose
nstataein
iooosio
...

correct output
9
6
7
5
7
...

user output
9
6
7
5
7
...

Test 10

Verdict: ACCEPTED

input
57009 63373
htenestn
tntsnten
tinia
oeneeas
...

correct output
6
4
9
6
3
...

user output
6
4
9
6
3
...

Test 11

Verdict: ACCEPTED

input
74407 16148
glisoudob
hlfepnlcueoa
babynoehtr
hlhyognsacedl
...

correct output
8
7
9
11
10
...

user output
8
7
9
11
10
...

Test 12

Verdict: ACCEPTED

input
28654 84535
oottoii
eteeiii
aoateeat
oetiieta
...

correct output
6
3
8
6
7
...

user output
6
3
8
6
7
...

Test 13

Verdict: ACCEPTED

input
36314 68959
rastatiaet
iaaoaeon
dtdeoaeert
drs
...

correct output
8
6
8
7
7
...

user output
8
6
8
7
7
...

Test 14

Verdict: ACCEPTED

input
4853 9409
eethlhehetcdedceilreetdedtresr...

correct output
12
15
63
34
17
...

user output
12
15
63
34
17
...

Test 15

Verdict: ACCEPTED

input
7704 4610
nbeweacrvsasairsnldhnrgchrthoi...

correct output
36
39
85
53
60
...

user output
36
39
85
53
60
...

Test 16

Verdict: ACCEPTED

input
4577 6495
eteataeet
eteaaeeteeaeeaaetaaeeeaeaateee...

correct output
53
31
29
32
64
...

user output
53
31
29
32
64
...

Test 17

Verdict: ACCEPTED

input
12153 709
ihenhoenomeeotet
ihenhoegwfhahnetslatrlaifmlsyr...

correct output
10
46
96
37
24
...

user output
10
46
96
37
24
...

Test 18

Verdict: ACCEPTED

input
544 37554
ihenhoegthl
ihenhoegwfhahneduorwr
ihenhoegweysn
ihenhoegwfhahnetslatrlaifmlsyr...

correct output
3
3
7
18
11
...

user output
3
3
7
18
11
...

Test 19

Verdict: ACCEPTED

input
519 38588
ohhntstaenoass
ohhntstaenriaiioeontasossi
ohhntsoatn
ohhntstaenriaiioeontttrasartho
...

correct output
7
30
11
8
18
...

user output
7
30
11
8
18
...