Cod sursa(job #60596)

Utilizator FlorianFlorian Marcu Florian Data 15 mai 2007 16:37:33
Problema NextSeq Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<stdio.h>
long a[1000],b[100],x[100],n,p,kred,m,baza[100],z[100];
void citire()
	{
	int i;
	FILE*f=fopen("nextseq.in","r");
	fscanf(f,"%ld %ld %ld",&n,&m,&p);
	for(i=1;i<=n;++i) fscanf(f,"%ld",&x[i]);
	for(i=1;i<=m;++i) fscanf(f,"%ld",&a[i]);
	for(i=1;i<=p;++i) fscanf(f,"%ld",&b[i]);
	}
void sort()
	{
	int ok,i,aux;
	do
		{
		ok=1;
		for(i=1;i<n;++i)
			if (x[i]>x[i+1]) {aux=x[i];x[i]=x[i+1]; x[i+1]=aux; ok=0;}
		}
	while(ok==0);
	}
void trans_baza()
	{
	int i;
	for(i=1;i<=n;i++) baza[x[i]]=i-1;
	}
void form_nr()
	{
	int i;
	for(i=1;i<=m;i++) a[i]=baza[a[i]]; //transfomam sirul a in baza n;
	for(i=1;i<=p;++i) b[i]=baza[b[i]]; //transf situl b in baza m;
	}
void invers()
	{
	int i,aux;
	for(i=1;i<=m/2;++i) { aux=a[i]; a[i]=a[m-i+1]; a[m-i+1]=aux;}
	for(i=1;i<=p/2;++i) {aux=b[i]; b[i]=b[p-i+1]; b[p-i+1]=aux;}
	}
void ready()
	{
	int i;
	if(p>m)
		{
		for(i=m;i>=1;--i)
			 a[p+m-i]=a[i];
		for(i=1;i<=p-m;++i) a[i]=0;
		}

	}
void diferenta()
	{
	int i,t=0;
	for(i=p;i>=1;i--)
		{
		if (b[i]-a[i]-t>=0)
			{
			z[i]=b[i]-a[i]-t;
			t=0;
			}
		else
			{
			z[i]=b[i]-a[i]-t+10;
			t=1;
			}
		}
	while(z[p]==0&&p>=1) p--;
	int r=1;
	while(kred<=p&&z[kred]==0) kred++;
	}
void afis()
	{
	FILE*g=fopen("nextseq.out","w");
	int i;
	if (kred>p) fprintf(g,"0");
	else
	for(i=p;i>=kred;--i) fprintf(g,"%ld",z[i]);
	fclose(g);
	}
int main()
	{
	citire();
	sort();
	trans_baza();
	form_nr();
	invers();
      //	ready();
	diferenta();
	afis();
        return 0;}