Afişează mesaje
|
Pagini: [1]
|
13
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1270 Search
|
: Februarie 07, 2015, 15:55:04
|
Va rog mult, e cineva dispus sa se uite pe sursa mea? Are complexitatea celei oficiale, dar se incadreaza foarte prost in timp. #include<iostream> #include<fstream> #include<stack> #include<cstring> #define l(a) a-'a' using namespace std; ifstream in("9-search.in"); ofstream out("search.out"); int N,M,len[105]; char s[5005],c; short poz[105][5005][30]; //in cuvantul i incepand cu pozitia j litera a apare pe pozitia stack<char> st; stack<int> last[105]; int main() { int i,j,k,r; char uc; in>>N>>M; for(i=1;i<=N;++i) { in>>s+1; len =strlen(s+1); for(j=len;j>=0;--j) { for(c='a';c<='z';++c) poz[j][l(c)]=poz[j+1][l(c)]; poz[j][l(s[j])]=j; } } for(i=1;i<=N;++i) last.push(0); for(k=1;k<=M;++k) { in>>c; if(c=='-') { st.pop(); for(i=1;i<=N;++i) last.pop(),last.pop(); } else st.push(c); uc=st.top(); r=0; for(i=1;i<=N;++i) { if(poz[last.top()][l(uc)] && poz[last.top()][l(uc)]<=len) { ++r; last.push(poz[last.top()][l(uc)]+1); } else last.push(-1); } out<<r<<'\n'; } }
|
|
|
|