👤
a fost răspuns

Problema Pbinfo DistLungMax #2738


Iau 20 de puncte pe sursa mea... Primeste punctele doar pe cazul in care nici un cuvant nu are toate literele distincte, desi mie imi merge orice exemplu.. nu merge nici pe exemplu pe evaluatorul de pe Pbinfo.. stie cineva de ce?? si poate cineva sa imi dea sursa de 100?

Asta e sursa:

#include
#include

using namespace std;

int v[26];
char s[256];
int k = 0, maxim = -1, indice = -1;
int cnt_mom = 0, sm = 0;

int main()
{
cin.getline(s, 256);

for(int i = 0; s[i]; ++i)
{
if(s[i] == 32)
{
int ok = 1, cnt = 0;
for(int j = 1; j <= 26; ++j)
{
if(v[j] > 1)
{
ok = 0;
break;
}
if(v[j] == 1)
cnt++;
}
if(ok)
{
if(cnt > maxim)
{
maxim = cnt;
indice = k;
}
}
for(int j = 1; j <= 26; ++j)
v[j] = 0;
k++;
}
else
{
v[s[i] - 96]++;
}
}

if(indice == -1)
{
cout << indice;
return 0;
}

for(int i = 0; s[i]; ++i)
{
sm++;
if(s[i] == 32)
{
cnt_mom++;
sm = 0;
}
if(cnt_mom == indice && sm != 0)
cout << s[i];
}

return 0;
}


Răspuns :

#include <iostream>

#include <cstring>

#include <fstream>

using namespace std;

ifstream f("distlungmax.in");

char s[255];

short n, i, j, lcuv, lmax, ind, distincte=1, frlit[26], exista;

int main()

{

   f.getline(s, 255);

   n=strlen(s);

   s[n]=' '; ++n; s[n]=0;

   i=0;

   while (i<n)

   {

       if (s[i]!=' ')

       {

           ++lcuv;

           j=s[i]-'a';

           ++frlit[j];

           if (frlit[j]>1) distincte=0;

       }

       else

       {

           if (distincte)

           {

               exista=1;

               if (lcuv>lmax)

               {

                   lmax=lcuv; ind=i-lmax;

               }

           }

           lcuv=0; distincte=1;

           for (j=0; j<26; ++j)

               frlit[j]=0;

       }

       ++i;

   }

   if (exista)

   {

       for (i=ind; i<ind+lmax; ++i )

           cout << s[i];

   }

   else cout << -1;

}