Cod sursa(job #1818868)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 29 noiembrie 2016 21:43:58
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin ("restante.in");
ofstream fout("restante.out");
int n,i,z,j,f[36010],x[36010],ii,ok,nr,aux;
char a[18],v[36010][18],w[36010][18];

int comp(int a, int b)
{
    int i;
    if(v[a][0]>v[b][0])
        return 1;
    else
        if(v[a][0]<v[b][0])
            return -1;
        else
            for(i=1;i<=v[a][0];i++)
                if(v[a][i]>v[b][i])
                    return 1;
                else
                    if(v[a][i]<v[b][i])
                        return -1;
    return 0;
}

int cpl(int a, int b)
{
    if(comp(a,b)==-1)
        return b>a;
    if(comp(a,b)==1)
        return a>b;
    return a=b;
}

int main ()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a;
        x[i]=i;
        z=0;
        while(a[z]!=0)
            z++;
        sort(a, a+z);
        for(j=1;j<=z;j++)
            v[i][j]=a[j-1];
        v[i][0]=z;
    }
    nr=n;
    sort(x+1, x+1+n,cpl);
    for(i=1;i<n;i++)
    {
        if(v[x[i+1]][0]==v[x[i]][0])
        {
            ok=1;
            for(j=1;j<=v[x[i]][0];j++)
                if(v[x[i+1]][j]!=v[x[i]][j])
                    ok=0;
            if(ok==1)
            {
                nr--;
                if(f[x[i]]==0)
                {
                    f[x[i]]=-1;
                    nr--;
                }
                f[x[i+1]]=-1;
            }
            aux++;
        }
    }
    fout<<nr;
    fin.close();
    fout.close();
    return 0;
}