Cod sursa(job #236755)

Utilizator DraStiKDragos Oprica DraStiK Data 28 decembrie 2008 14:21:17
Problema Oz Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int n,m,nrt;
char a[36005][20];
int divide (int p,int q)
{
    char x[20];
    int st,dr;
    st=p;
    dr=q;
    strcpy (x,a[p]);
    while (st<dr)
    {
        while (st<dr && strcmp (a[dr],x)>=0)
            --dr;
        strcpy (a[st],a[dr]);
        while (st<dr && strcmp (a[st],x)<=0)
            ++st;
        strcpy (a[dr],a[st]);
        strcpy (a[st],x);
    }
    return st;
}
void qicksort (int p, int q)
{
    int m;
    m=divide (p,q);
    if (m-1>p)
        qicksort (p,m-1);
    if (m+1<q)
        qicksort (m+1,q);       
}
void solve ()
{
    int i;
    if (strcmp (a[1],a[2]))
        ++nrt;
    if (strcmp (a[n-1],a[n]))
        ++nrt;
    for (i=2; i<n; ++i)
        if (strcmp (a[i-1],a[i]) && strcmp (a[i],a[i+1]))
            ++nrt;
}
int main ()
{
    freopen ("restante.in","r",stdin);
    freopen ("restante.out","w",stdout);
    int i;
    scanf ("%d\n",&n);
    for (i=1; i<=n; ++i)
    {
        gets (a[i]);
        m=strlen (a[i]) ;
        sort (a[i],a[i]+m);   
    }
    qicksort (1,n);
    /*for (i=1; i<=n; ++i)
        printf ("%s\n",a[i]);*/
    solve ();
    printf ("%d",nrt);
    return 0;
}