Pagini recente » Cod sursa (job #1650358) | Monitorul de evaluare | Cod sursa (job #1350414) | Cod sursa (job #587055) | Cod sursa (job #1336059)
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
char aux[1600],*p,sir[300001];
struct rct
{
char cuv[17];
int putere;
}v[101][101]; // v[propozitie][cuvinte];
bool cmp(rct A, rct B)
{
return A.putere>B.putere;
}
int nrp,nrc[101],i,j,len,litere[30],putere,nr_carac,dim_mat,k,x,y,h,nr,max_nr;
char mat[600][600];
int main()
{
//citire + prelucrare + punere in memorie
while(1)
{
cin.getline(aux,1600);
if(!strlen(aux))
break;
for(i=0; i<=26; i++)
litere[i]=0;
//elimin caracterele care nu sunt litere & fac literele mici
len=strlen(aux); strlwr(aux);
for(i=0; i<len; i++)
{
if(!isalpha(aux[i]) && aux[i]!=' ')
strcpy(aux+i,aux+i+1);
litere[aux[i]-'a']++;
};
//sparg sirul in cuvinte si il pun in memorie
nrp++;
p=strtok(aux," ");
while(p)
{
strcpy(v[nrp][++nrc[nrp]].cuv,p);
putere=0;
for(i=0; i<strlen(p); i++)
putere+= litere[p[i]-'a'];
nr_carac+=strlen(p)+1;
v[nrp][nrc[nrp]].putere=putere;
p=strtok(NULL," ");
}
}
//fac sortarea
for(i=1; i<=nrp; i++)
sort(v[i]+1,v[i]+nrc[i]+1,cmp);
//alfu dimensiunea matricii
nr_carac--;
if((double)sqrt(nr_carac)>(int)sqrt(nr_carac))
dim_mat=sqrt(nr_carac)+1;
else
dim_mat=sqrt(nr_carac);
//bag totul intr-un sir
for(i=1; i<=nrp; i++)
for(j=1; j<=nrc[i]; j++)
{
for(h=0; h<strlen(v[i][j].cuv); h++)
sir[++max_nr]=v[i][j].cuv[h];
sir[++max_nr]='0';
}
//parcurg spirala
nr=0;
for (i=1;i<=(dim_mat/2)+(dim_mat%2);i++)
{
for (j=i; j<=dim_mat-i+1; j++)
{
if(nr>max_nr)
mat[i][j]='0';
else
mat[i][j]=sir[++nr];
}
for (j=1+i; j<=dim_mat-i+1; j++)
{
if(nr>max_nr)
mat[j][dim_mat-i+1]='0';
else
mat[j][dim_mat-i+1]=sir[++nr];
}
for (j=dim_mat-i;j>=i;j--)
{
if(nr>max_nr)
mat[dim_mat-i+1][j]='0';
else
mat[dim_mat-i+1][j]=sir[++nr];
}
for (j=dim_mat-i; j>=i+1; j--)
{
if(nr>max_nr)
mat[j][i]='0';
else
mat[j][i]=sir[++nr];
}
}
for(i=1; i<=dim_mat; i++)
{
for(j=1; j<=dim_mat; j++)
{
if(mat[i][j]==NULL)
cout<<"0 ";
else
cout<<mat[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\n\n";
cout<<sir+1;
}