Cod sursa(job #394910)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 11 februarie 2010 19:56:31
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
using namespace std;
#include<cstdio>
#include<fstream>
#include<iostream>
#include<algorithm>
#include<cstring>

int a[36005][18],n,rez,b[36005];

void citire()
{
    ifstream fin("restante.in");
    fin>>n;
    char c[17];
    int i;
    fin.getline(c,100);
    for(int j=1;j<=n;j++)
    {
        fin.getline(c,20);
        for(i=0;c[i];i++)
            a[j][i+1]=int(c[i]);
        a[j][0]=i;
        sort(a[j]+1, a[j]+a[j][0]+1);
        b[j]=1;
    }
}

void afis()
{
    int i,j;
    for(i=1;i<=n;i++)
        printf("%d ", b[i]);
    printf("\n");
    printf("%d\n",n);
    for(i=1;i<=n;i++)
    {
        for(j=0;j<=a[i][0];j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    printf("\n");
}

int egal(int i1,int i2)
{

    if(a[i1][0]!=a[i2][0])
        return 0;
    else
    {
        int i;
        for(i=1;i<=a[i1][0];i++)
        {
            if(a[i1][i]!=a[i2][i])
                return 0;
        }

        return 1;
    }
}

int main()
{
    freopen("restante.out","w",stdout);
    citire();
    //afis();
    int i,j;
    rez=n;
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
            if(egal(i,j)==1)
            {
                if(b[i]==1 && b[j]==1)
                    rez-=2;
                else
                    rez--;
                b[i]=0,b[j]=0;
            }
    printf("%d", rez);
    return 0;
}