Cod sursa(job #1810807)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 20 noiembrie 2016 16:34:54
Problema Restante Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>
#include <algorithm>
#include <bitset>

using namespace std;
int ff[30];
pair <int,pair<int,int> > v[36001];
int a[36001][30];
int verif (int x,int y){
    for (int j=0;j<30;j++)
        if (a[x][j]!=a[y][j])
            return 1;
    return 0;
}
int main()
{
    FILE *fin=fopen ("restante.in","r");
    FILE *fout=fopen ("restante.out","w");
    int n,i,nr,uni,st,l;
    char c;
    fscanf (fin,"%d\n",&n);
    for (i=1;i<=n;i++){
        c=fgetc (fin);
        nr=0;
        for (int j=0;j<30;j++){
            a[i-1][j]=ff[j];
            ff[j]=0;
        }
        while (c!='\n'){
            l=c-'a';
            v[i].second.first++;
            if (ff[l]==0)
                nr=nr+(1<<l);
            ff[l]++;
            c=fgetc (fin);
        }
        v[i].first=nr;
        v[i].second.second=i;
    }
    for (int j=0;j<30;j++)
        a[n][j]=ff[j];
    sort (v+1,v+n+1);
    uni=0;
    st=0;
    for (i=1;i<=n;i++){
        if (v[i].first!=v[i-1].first || v[i].second.first!=v[i-1].second.first || verif(v[i-1].second.second,v[i].second.second)){
            uni++;
            st=0;
        }
        else
            if (st==0){
                st=1;
                uni--;
            }
    }
    fprintf (fout,"%d",uni);
    return 0;
}