Cod sursa(job #1312062)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 8 ianuarie 2015 21:01:50
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define nmax 40000
#define lgmax 17
using namespace std;
FILE *f=fopen("restante.in","r");
FILE *g=fopen("restante.out","w");
int sol;
char s[nmax][lgmax];
int c[30];

struct elem {long long a;long long b;};
elem v[nmax];

bool diferit (int k,int t)
{
    if (v[k].a!=v[t].a) return true;
    if (v[k].b!=v[t].b) return true;
    return false;
}


bool cmp(const elem &x,const elem &y)
{
    if (x.b<y.b) return true;
    if (x.b>y.b) return false;
    if (x.a<y.a) return true;
    return false;

}
int main()
{   unsigned long long put;
    int n,i,j,k;
    fscanf(f,"%d\n",&n);
    for (i=1;i<=n;i++) {
            v[i].a=0;v[i].b=0;
            fscanf(f,"%s",&s[i]);
            k=0;
            for (j=0;j<strlen(s[i]);j++) c[s[i][j]-'a']++;
            for (j=0;j<26;j++)
                    while (c[j]!=0) {
                        c[j]--;
                        s[i][k++]=j+'a';
                    }
            put=1;
            for (j=0;j<strlen(s[i]);j++) {
                            if (j<10) v[i].a+=1LL*(s[i][j]-'a')*put;
                                  else {if (j==10) put=1;
                                        v[i].b+=1LL*(s[i][j]-'a')*put;
                                  }
                            put*=26;
            }
    }
    sort(v+1,v+n+1,cmp);
    for (i=1;i<=n;i++) if (diferit(i,i-1)==true&&diferit(i,i+1)==true)
                        sol++;
    fprintf(g,"%d\n",sol);

    return 0;

}