Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1270 Search  (Citit de 1160 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
andrei.12
Echipa infoarena
Nu mai tace
*****

Karma: 107
Deconectat Deconectat

Mesaje: 381



Vezi Profilul
« : Aprilie 21, 2012, 08:22:50 »

Aici puteti discuta despre problema Search.
« Ultima modificare: Februarie 07, 2015, 21:42:54 de către Duta Vlad » Memorat
andreiulian
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #1 : 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. Brick wall


#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';
    }
}
Memorat
Vman
Echipa infoarena
Vorbaret
*****

Karma: 45
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #2 : Februarie 07, 2015, 21:40:40 »

ifstream in("9-search.in");

short poz[105][5005][30];
..
 poz[j][l(s[j])]=j; // iti lipseste o dimensiune aici

probabil va trebui sa inlocuiesti stack-ul cu ceva mai rapid
« Ultima modificare: Februarie 07, 2015, 22:01:09 de către Duta Vlad » Memorat
andreiulian
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #3 : Februarie 09, 2015, 14:47:43 »

multumesc
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines