Cod sursa(job #142043)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 24 februarie 2008 08:48:21
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 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 platouri(char m[36009][20], int n) //returnez numarul de platouri  
    {  
     int sol=0,i,j;  
      for(i=1;i<n;++i)  
     if(strcmp(m[i],m[i+1])!=0) sol++;  
     else  
       while(strcmp(m[i],m[i+1])==0) ++i;  
      if(strcmp(m[n],m[n-1])!=0) sol++;  
     return sol;  
     }  
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);
	}
	c=platouri(m,n);
	printf("%d",c);
	return 0;
}