Submission #1201376


Source Code Expand

#include <bits/stdc++.h>
 
using namespace std;
 
typedef pair<string,int> P;
int N,Q,K,X,Y,W,Max,I,ans;
const int A=777777,B=123456;
const int INF=1000000009;
 
char C[A]; 
int parent[A],Parent[A],node[A],Node[A],O[26];
int G[B]; P H[B];
int J[B];
int JJ[A];
int Cnt[A];
int table[26][26];
vector<int> ch[A],L[A];
string S[B],T[B],U[B],V[B];
 
void dfs(int s,int e,int j,int p){
    int x=S[s][j]-'a'; int k=s;
  for(int i=s; i<=e; i++){
    if(x!=S[i][j]-'a'){
      dfs(k,i-1,j,p); k=i;
      x=S[i][j]-'a'; 
    }
  }
     //cout<<x<<" "<<j<<" "<<I++<<" "<<p<<endl;
     if(x<0) node[I]=26;
     else node[I]=x;
     if(j==0) parent[I]=A-1;
     else parent[I]=p;
     I++;
    if(x<0) return;
    if(j<Max) dfs(k,e,j+1,I-1);
    return;
}
int Pr(int k){
  int p=parent[k];
  if(p==A-1) return A-1;
  if(ch[parent[p]].size()==1){
    return Pr(p);
  }else{
    return p;
  }
}
int cnt(int k){
  if(L[k].size()==0){
    Cnt[k]=1;
    return 1;
  }
  for(int i=0; i<L[k].size(); i++){
    Cnt[k]+=cnt(L[k][i]);
  }
    return Cnt[k];
}
void make(int k){
  if(L[k].size()==0){
    J[X]=node[k]; JJ[X]=k;
    X++;
    return;
  }
  for(int i=0; i<L[k].size(); i++){
    make(L[k][i]);
  }
}
void Find(int k){
  if(W>=V[G[K-1]].size()) return;
  if(L[k].size()==0) return;
  int s;
  if(V[G[K-1]][W]-'a'>=0) s=V[G[K-1]][W]-'a'; 
  else s=-INF;
  int t;
  for(int i=0; i<L[k].size(); i++){
     if(s==node[L[k][i]]){
      t=L[k][i]; 
     }
     if(node[L[k][i]]<26&&table[s][node[L[k][i]]]==0){
      ans+=Cnt[L[k][i]];
     }
     if(node[L[k][i]]==26){
      ans++;
      Find(L[k][i]); 
     }
  }
  W++; Find(t); 
}
 
int main(){
 
cin>>N;
 
for(int i = 0; i < N; i++){
  scanf("%s", C);
  S[i] = string(C);
  if(S[i].size()>Max) Max=S[i].size();
}
 
for(int i = 0; i < N; i++) U[i]=S[i];
 
sort(S,S+N);
 
dfs(0,N-1,0,A-1);  
 
for(int i = 0; i < I; i++) ch[parent[i]].push_back(i);
 
for(int i = 0; i < I; i++){
  int p=parent[i];
  if(ch[p].size()==1) node[i]=-INF;
}
 
for(int i = 0; i < I; i++){
  if(node[i]!=-INF){
    Parent[i]=Pr(i);
  }else{
    Parent[i]=-INF;
  }
}
 
for(int i = 0; i < I; i++){
  if(Parent[i]>=0) L[Parent[i]].push_back(i);
}
 
make(A-1); 
for(int i=0; i<N; i++){
  if(J[i]<=25){
    char c='a'+J[i];
    V[i]=c;
  }
  if(J[i]==26){
    V[i]="";
  }
  int k=JJ[i];
  while(1){
    if(Parent[k]==A-1) break;
    char c='a'+node[Parent[k]];
    V[i]=c+V[i];
    k=Parent[k];
  }
}
 
sort(V,V+N); 
for(int i=0; i<N; i++){
  H[i].first=U[i];
  H[i].second=i;
}
sort(H,H+N);
for(int i=0; i<N; i++){
  G[H[i].second]=i;
}

cnt(A-1);
 
cin>>Q;
 
for(int i=0; i<Q; i++){
  scanf("%d %s",&K,C);
  T[i] = string(C);
  for(int j=0; j<26; j++){
    O[T[i][j]-'a']=j;
  }
 for(int k=0; k<26; k++){
  for(int j=0; j<26; j++){
    table[k][j]=0;
  }
 }
 for(int k=0; k<26; k++){
  for(int j=0; j<26; j++){
   if(O[k]<=O[j]){
    table[k][j]=1;
   }else{
    table[k][j]=0;
   }
  }
 }
  X=0; I=0; ans=0; W=0;
  Find(A-1);
  printf("%d\n",ans+1);
}
 
return 0;
 
}

Submission Info

Submission Time
Task E - Lexicographical disorder
User momotaro1303
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3163 Byte
Status RE
Exec Time 1003 ms
Memory 83968 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:94:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s", C);
                 ^
./Main.cpp:157:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %s",&K,C);
                      ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 1100
Status
AC × 2
AC × 40
RE × 2
Set Name Test Cases
Sample s1.txt, s2.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, s1.txt, s2.txt
Case Name Status Exec Time Memory
01.txt AC 439 ms 82944 KB
02.txt AC 441 ms 82944 KB
03.txt AC 438 ms 82944 KB
04.txt AC 442 ms 82944 KB
05.txt AC 333 ms 83968 KB
06.txt AC 265 ms 82048 KB
07.txt AC 245 ms 81664 KB
08.txt AC 232 ms 81536 KB
09.txt AC 222 ms 81536 KB
10.txt AC 207 ms 81536 KB
11.txt AC 305 ms 68224 KB
12.txt AC 324 ms 70528 KB
13.txt AC 351 ms 73472 KB
14.txt AC 244 ms 81408 KB
15.txt AC 216 ms 81664 KB
16.txt AC 208 ms 81536 KB
17.txt RE 132 ms 71296 KB
18.txt AC 880 ms 63488 KB
19.txt AC 881 ms 63488 KB
20.txt AC 1003 ms 63488 KB
21.txt AC 994 ms 63488 KB
22.txt AC 1002 ms 63488 KB
23.txt AC 312 ms 70784 KB
24.txt AC 302 ms 68224 KB
25.txt AC 323 ms 70528 KB
26.txt AC 872 ms 63488 KB
27.txt AC 224 ms 64768 KB
28.txt AC 225 ms 65536 KB
29.txt AC 203 ms 64640 KB
30.txt AC 268 ms 68352 KB
31.txt AC 218 ms 66944 KB
32.txt AC 195 ms 65536 KB
33.txt AC 193 ms 67200 KB
34.txt AC 193 ms 66560 KB
35.txt AC 197 ms 67840 KB
36.txt AC 434 ms 83456 KB
37.txt AC 192 ms 71296 KB
38.txt AC 191 ms 71296 KB
39.txt AC 18 ms 55552 KB
40.txt RE 112 ms 53504 KB
s1.txt AC 18 ms 55552 KB
s2.txt AC 18 ms 55552 KB