Pagini recente » Cod sursa (job #528142) | Cod sursa (job #3229089) | Cod sursa (job #2305284) | Cod sursa (job #1545471) | Cod sursa (job #395310)
Cod sursa(job #395310)
#include <stdio.h>
#include <string.h>
FILE *f=fopen ("restante.in", "r");
FILE *g=fopen ("restante.out", "w");
int v[2][36001],i,n,j,c,k,s;
char a[20];
void schimbare(int k, int k2, int i, int inj)
{
v[k][i]=v[k][i]^v[k][i+inj];
v[k][i+inj]=v[k][i]^v[k][i+inj];
v[k][i]=v[k][i]^v[k][i+inj];
v[k2][i]=v[k2][i]^v[k2][i+inj];
v[k2][i+inj]=v[k2][i]^v[k2][i+inj];
v[k2][i]=v[k2][i]^v[k2][i+inj];
}
void shell(int k, int k2) {
int inj=n,i,sw;
while (inj>1)
{
inj/=2;
do
{
sw=0;
for (i=1;i<=n-inj;i++)
if (v[k][i]<v[k][i+inj])
if (k)
{
if (v[k2][i]==v[k2][i+inj])
{
schimbare (k, k2, i, inj);
sw=1;
}
}
else
{
schimbare (k, k2, i, inj);
sw=1;
}
}
while (sw);
}
}
int main() {
fscanf (f, "%d", &n);
for (i=1;i<=n;i++)
{
fscanf (f, "%s", &a);
s=0; c=0;
for (j=0;j<=strlen(a)-1;j++)
{
if (!j)
c++;
else
if (j<strlen(a)-1)
{
if (strchr (a+j+1, a[j])==0)
c++;
}
else
if (a[j]!=a[0])
c++;
s+=a[j];
}
v[0][i]+=s;
v[1][i]+=c;
}
shell (0, 1);
shell (1, 0);
for (i=1;i<=n-1;i++)
if (v[0][i]==v[0][i+1])
{
if (v[1][i]!=v[1][i+1])
k++;
}
else
if (i==n-1)
k+=2;
else
k++;
fprintf (g, "%d", k);
return 0;
}