Cod sursa(job #142042)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 24 februarie 2008 08:39:53
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 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;
	inj=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=strlen(t[x]);i<20;i++)
		t[x][i]='\0';
	for(i=strlen(t[y]);i<20;i++)
		t[y][i]='\0';
}

int main(){
	char m[36009][20];
	int i,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],m[i+inj]);
				if(x==1){ 
					copiere(m,i,i+inj);
					gata=0;}
			}
		}
		while(!gata);
	}
	for(i=1;i<n;i++){
		if(strcmp(m[i],m[i+1])==0) { v[i]=1; v[i+1]=1; }
		if(!v[i]) c++;
	}
	if(!v[n]) c++;
	printf("%d",c);
	return 0;
}