Cod sursa(job #1553432)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 19 decembrie 2015 20:42:35
Problema Restante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <algorithm>
#define lim 36003
using namespace std;
struct cuv{int fr[30];};
cuv v[lim];
int cmp(cuv a,cuv b){
    int k=0;
    while(a.fr[k]==b.fr[k]&&k<=26)
        k++;
    if(k==27)
        return 0;
    if(a.fr[k]==0)
        return 1;
    if(b.fr[k]==0)
        return -1;
    if(a.fr[k]>b.fr[k])
        return -1;
    else
        return 1;
}
bool comp(cuv a,cuv b){
    if(cmp(a,b)>=0)
        return true;
    else
        return false;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("restante.in","r");
    fout=fopen("restante.out","w");
    int i,n,rasp,cate;
    char ch;
    fscanf(fin,"%d",&n);
    ch=fgetc(fin);
    ch=0;
    for(i=1;i<=n;i++){
        ch=fgetc(fin);
        while(ch!='\n'&&ch!=EOF){
            v[i].fr[ch-'a'+1]++;
            ch=fgetc(fin);
        }
    }
    sort(v+1,v+n+1,comp);
    rasp=n;
    cate=0;
    for(i=1;i<=n;i++)
        if(cmp(v[i-1],v[i])==0)
            cate++;
        else{
            if(cate!=1)
                rasp-=cate;
            cate=1;
        }
    if(cate!=1)
        rasp-=cate;
    fprintf(fout,"%d",rasp);
    fclose(fin);
    fclose(fout);
    return 0;
}