Cod sursa(job #789321)

Utilizator adascaluAlexandru Dascalu adascalu Data 17 septembrie 2012 20:14:35
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
using namespace std;
#include<vector>
#include<fstream>
#include<cstdio>
#include<stack>
#include<string>
#define nmax 101
#define mmax 200001
#define lmax 5001
int rez[nmax],n,len[nmax];
char a[nmax][lmax];
vector<stack<int> > track(nmax);
void search(int nr,char oper);
void cdelete(int nr);
ofstream g("search.out");
int main ()
{
	int j,m,i,nrop=0;
	//vector<vector<char> >a(nmax,vector<char>(lmax));
	FILE *f=fopen("search.in","r");
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		j=1;
		while(fgetc(a[i][j])!=EOF)
			j++
	}
	/*char op;
	ifstream f("search.in");
	f>>n>>m;
	for(i=1;i<=n;i++)
	{
		track[i].push(0);
		j=0;
		f>>a[i][j]
		while(a[i][j]!=EOL)
			j++;
		len[i]=j;
	}
	
	for(i=1;i<=m;i++)
	{
		f>>op;
		if(op!='-')
		{
			++nrop;
			search(nrop,op);
		}
		else
		{
			cdelete(nrop);
			--nrop;
		}
	}
	f.close();*/
	g.close();
	return 0;
}
void cdelete(int nr)
{
	int deafis=0;
	for(int i=1;i<=n;i++)
		if(rez[i]==nr-1||rez[i]==nr)
		{	++deafis;
			if(rez[i]==nr)
				--rez[i],track[i].pop();
		}
	g<<deafis<<"\n";	
}
void search(int nr,char oper)
{
	int de_afis=0,i,poz,j;
	bool ok;
	for(i=1;i<=n;i++)
		if(rez[i]==nr-1)
		{
			poz=track[i].top();
			ok=false;
			for(j=poz;j<len[i]&& !ok;j++)
				if(a[i][j]==oper)
					++de_afis,ok=true;
			if(ok)
			{
				track[i].push(j);
				++rez[i];
			}
		}
	g<<de_afis<<"\n";
}