Cod sursa(job #2540880)

Utilizator dianaICHBghita diana dianaICHB Data 7 februarie 2020 20:16:23
Problema Restante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.21 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int v[36005][30],v1[30];
int w[36005];
char vi[36005];
int main()
{
    freopen("restante.in","r",stdin);
    freopen("restante.out","w",stdout);
    int n,i,j,nr,ult,k,con,nom;
    scanf("%d",&n);
    gets(vi);
    for (i=1; i<=n; i++)
    {
        fgets(vi,20,stdin);
        nr=strlen(vi);
        for (j=0; j<nr; j++)
            v1[j]=vi[j]-'a'+1;

        w[i]=nr;
        sort (v1,v1+nr);
        for (j=0; j<nr; j++)
            v[i][j]=v1[j];
    }
    //sort (v+1,v+1+n);
    /*for (i=1;i<=n;i++)
    {
        for (j=0;j<w[i];j++)
        printf("%d ",v[i][j]);
        printf("\n");
    }*/
    nr=0;
    ult=n;
    while (nr==0)
    {
        nr=1;
        for (i=1; i<=n; i++)
        {
            for(j=i+1; j<=n; j++)
            {
                if (w[i]>w[j])
                {
                    nr=w[i];
                    w[i]=w[j];
                    w[j]=nr;
                    //nr=v[i];
                    swap(v[i],v[j]);
                    nr=0;
                }
                if (w[i]==w[j])
                {
                    /*printf("v[i]= ");
                    for (int k1=0;k1<w[i];k1++)
                        printf("%d ",v[i][k1]);
                    printf("\n");
                    printf("v[j]= ");
                    for (int k1=0;k1<w[j];k1++)
                        printf("%d ",v[j][k1]);
                    printf("\n");*/
                    for (k=0; k<w[i]; k++)
                    {
                        if (v[i][k]>v[j][k])
                        {
                            //printf("%d %d %d\n",v[i][k],v[j][k],k);
                            swap(v[i],v[j]);
                            k=w[i]+5;
                            //printf("%d %d\n",v[i][k],v[j][k]);
                            //j=n+5;
                        }
                        if (v[i][k]<v[j][k])
                            k=w[i]+5;
                    }
                }
            }
        }
        ult--;
    }
    /*for (i=1; i<=n; i++)
    {
        for (j=0; j<w[i]; j++)
            printf("%d ",v[i][j]);
        printf("\n");
    }*/
    con=0;
    int ver=0;
    for (k=1; k<n; k++)
    {
        //printf("%d %d %d\n",w[k],w[k+1],ver);
        if (w[k]<w[k+1])
        {
            if (ver!=0||k==1)
            {
            con++;
            //ver=1;
            }
            if (k==n-1)
                con++;
            ver=1;
        }
        else
        {
            nom=0;
            for (i=0; i<w[k]; i++)
            {
                if (v[k][i]!=v[k+1][i])
                {
                    //printf("%d %d\n",v[k][i],v[k][i+1]);
                    i=w[k]+5;
                    if (ver==1)
                    con++;
                    nom=1;
                    if (k==n-1)
                        con++;
                }
            }
                if (nom==0)
                    ver=0;
                    else
                        ver=1;
                        //printf()
        }
        //printf("%d\n",con);
    }
    printf("%d",con);
    return 0;
}