Răspuns :
L-am optimizat cat de mult am putut(si am mai modificat cate ceva sa fie corect):
#include <fstream>
#include <cstring>
#include <algorithm>
#define NMax 100002
#define lgMax 100
#define lMax 26
using namespace std;
ifstream fin("raganama.in");
ofstream fout("raganama.out");
int cer,p;
short int ap[lMax],E[lgMax+85];
char x[lgMax+5];
string s[NMax+100];
typedef short int NrMare[lgMax+30];
NrMare a;
bool cb(string y,string x[],int st,int dr)
{
if(st > dr)
return 0;
int mij=(st+dr)/2;
int cmprez = y.compare(x[mij]);
if(cmprez == 0)
return 1;
else if(cmprez < 0)
return cb(y,x,1,mij-1);
else if(cmprez > 0)
return cb(y,x,mij+1,dr);
return 0;
}
void dp1(int x)
{
int d=2,p;
if(!x)
return;
while(d*d<=x)
{
p=0;
while(x%d==0)
{
x/=d;
p++;
}
E[d++]+=p;
}
E[x]++;
}
void dp2(int x)
{
int d=2,p;
if(!x)
return;
while(d*d<=x)
{
p=0;
while(x%d==0)
{
x/=d;
p++;
}
E[d++]-=p;
}
E[x]--;
}
void Produs(NrMare a,int x)
{
int i,ct;
for(i=1,ct=0; i<=p; i++)
{
a[i]=a[i]*x+ct;
ct=a[i]/10;
a[i]=a[i]%10;
}
while(ct)
{
a[++p]=ct%10;
ct/=10;
}
}
void Scadere(NrMare a, int x){
int carry = 0;
for(int i = 1; i <= p; i++){
a[i] = a[i] - carry - x%10;
x/=10;
if(a[i] < 0){
carry = 1;
a[i] += 10;
}
else carry = 0;
}
while(a[p] == 0)
p--;
}
int main()
{
int n=0;
fin>>cer;
while(fin.getline(x,NMax))
s[n++]=x;
n--;
int len = s[1].length();
if(cer==1)
{
string sir;
memcpy(x, s[1].c_str(), len+1);
do
{
sir=x;
if(!cb(sir,s,0,n))
{
fout<<sir;
return 0;
}
}
while(next_permutation(x,x+len));
}
else
{
int i,j,lg;
lg=len;
p=a[1]=1;
for(i=0; i<=lg; i++)
ap[s[1][i]-'a']++;
for(i=1; i<=lg; i++)
dp1(i);
for(i=0; i<=25; i++)
for(j=2; j<=ap[i]; j++)
dp2(j);
///---------Calculez Totalul---------///
for(i=2; i<=lg; i++)
for(j=1; j<=E[i]; j++)
Produs(a,i);
Scadere(a, n);
///--------------------------------///
for(i=p; i>=1; i--)
fout<<a[i];
}
return 0;
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.