Cod sursa(job #2168)

Utilizator peanutzAndrei Homorodean peanutz Data 16 decembrie 2006 10:07:37
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>
#include <string.h>

#define NMAX 50004


char s[NMAX], o[20];
int n, poz, lenght;


void read()
{
scanf("%s\n", s);


lenght = poz = strlen(s);


scanf("%d\n", &n);
}



void B()
{
if((poz == lenght) && (poz != 0))
	{
		lenght = 0;
		poz = 0;
	}
else
{
memcpy(s+poz-1, s+poz, lenght-poz);
--lenght;
}

}


void I()
{
int i;

i = strlen(o+1);

memcpy(s+poz+i, s+poz, lenght-poz);

memcpy(s+poz, o+1, i);

lenght += i;
}


int makenumber()
{
int i = 1, number = 0;


for(; o[i] != '\0'; ++i)
	number = number * 10 + (o[i]-'0');

return number;
}


void D(int i)
{
if(poz+i >= lenght)
	{
		i = lenght-poz;
		lenght -= i;
	}
else
	lenght -= i;



memcpy(s+poz, s+poz+i, lenght-poz);
}



void write()
{
s[lenght] = '\0';

fputs(s, stdout);
}



int main()
{
int i = 0;

freopen("ed.in", "r", stdin);
freopen("ed.out", "w", stdout);


read();


while(i++ < n)
	{
		scanf("%s\n", o);


		if(o[0] == 'L')
			{
				if(poz > 0)
					--poz;
			}

		else if(o[0] == 'R')
			{
				if(poz < lenght-1)
					++poz;
			}

		else if(o[0] == 'B')
			B();

		else if(o[0] == 'I')
			I();

		else if(o[0] == 'D')
			D(makenumber());
	}



write();


fclose(stdin);
fclose(stdout);

return 0;
}