Cod sursa(job #397047)

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

int a[36005][18],n,rez,osort[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);
    }
}

void afis()
{
    int i,j;
    printf("%d\n",n);
    for(i=1;i<=n;i++)
    {
        for(j=0;j<=a[osort[i]][0];j++)
            printf("%d ", a[osort[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 cmp(int x, int y)
{
    return (a[x][1]<a[y][1]);
}

void sorteaza()
{
    for(int i=1;i<=n;i++)
        osort[i]=i;
    sort(osort+1,osort+n+1,cmp);
    //printf("\n");
    for(int i=1;i<=n;i++)
        printf("%d ", osort[i]);
    printf("\n");
}

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