Cod sursa(job #142040)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 24 februarie 2008 08:27:54
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
short int v[36009]={0};
void transform(char t[36009][20],int lin,int n){
	int i,aux,inj,gata;
	for(i=n;i>=1;i--)
		t[lin][i]=t[lin][i-1];
	inj=n;
	t[lin][0]=n;
	while(inj>1){
		inj/=2;
		do{
			gata=1;
			for(i=1;i<=n-inj;i++)
				if(t[lin][i]>t[lin][i+inj]){
					aux=t[lin][i];
					t[lin][i]=t[lin][i+inj];
					t[lin][i+inj]=aux;
					gata=0;
				}
		}
		while(!gata);
	}
}
void copiere(char t[36009][20],int x,int y){
	char m[36009],i;
	memcpy(m,t[x],sizeof(t[x]));
	memcpy(t[x],t[y],sizeof(t[y]));
	memcpy(t[y],m,sizeof(m));
	for(i=t[x][0]+1;i<20;i++)
		t[x][i]='\0';
	for(i=t[y][0]+1;i<20;i++)
		t[y][i]='\0';
}

int main(){
	char m[36009][20];
	int i,j,n,x,cn,inj,gata,c=0;
	freopen("restante.in","r",stdin);
	freopen("restante.out","w",stdout);
	scanf("%d",&n);
	cn=n;
	for(i=1;i<=n;i++){
		scanf("%s",&m[i]);
		x=strlen(m[i]);
		transform(m,i,x);
	}
	inj=n;
	while(inj>1){
		inj/=2;;
		do{
			gata=1;
			for(i=1;i<=n-inj;i++){
				x=0;
				x=strcmp(m[i]+1,m[i+inj]+1);
				if(x==1){ 
					copiere(m,i,i+inj);
					gata=0;}
			}
		}
		while(!gata);
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m[i][0];j++)
			printf("%c",m[i][j]);
	printf("\n");
	}
	for(i=1;i<n;i++)
		if(strcmp(m[i]+1,m[i+1]+1)==0) { v[i]=1; v[i+1]=1; }
	for(i=1;i<=n;i++)
		if(!v[i]) c++;
	printf("%d",c);
	return 0;
}