infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Stefan Istrate din Aprilie 20, 2010, 23:03:37



Titlul: 1031 Cmmmc
Scris de: Stefan Istrate din Aprilie 20, 2010, 23:03:37
Aici puteti discuta despre problema Cmmmc (http://infoarena.ro/problema/cmmmc).


Titlul: Răspuns: 1031 Cmmmc
Scris de: Vlad Tarniceru din Aprilie 24, 2010, 12:23:39
imi spune si mie va rog cineva care e complexitatea de 100 de puncte la aceasta problema? :)


Titlul: Răspuns: 1031 Cmmmc
Scris de: Sergiu-Ioan Ungur din Mai 03, 2010, 16:40:08
Complexitatea de timp este aproximativ O(K * (sqrtN + 2 ^ (nrdivizoriN))). Ar mai fii pregenerarea numerelor prime pentru care nu stiu exact complexitatea, dar oricum se incadreaza lejer in timp daca faci cu ciurul lui eratostene.


Titlul: Răspuns: 1031 Cmmmc
Scris de: Petru Trimbitas din Mai 05, 2010, 15:24:49
ce inseamna Killed by signal 6(SIGABRT).   ?
ce sa fac sa nu depasesc memoria? lucrez cu vectori din stl.   ](*,) ](*,) ](*,)


Titlul: Răspuns: 1031 Cmmmc
Scris de: Simoiu Robert din Mai 05, 2010, 15:58:49
Lucrezi cumva cu assert? De obicei acel semnal il iei daca programul iasa fortat .


Titlul: Răspuns: 1031 Cmmmc
Scris de: Petru Trimbitas din Mai 05, 2010, 16:24:14
Nu lucrez cu assert, dar nu stiu cum sa fac sa mearga problema. Solutia si sursa oficiala nu le prea inteleg si la rez. mea iau erori urate :(


Titlul: Răspuns: 1031 Cmmmc
Scris de: Simoiu Robert din Mai 05, 2010, 16:47:43
Trimite-mi sursa prin PM .


Titlul: Răspuns: 1031 Cmmmc
Scris de: FMI Trifan Mircea Mihai din Martie 15, 2011, 23:59:19
Imi puteti explica si mie cam de ce as putea lua "Killed by signal 8(SIGFPE)"?
Am citit ca e posibil ca acest semnal sa apara pentru ca am o impartire la 0 dar nu am.


Titlul: Răspuns: 1031 Cmmmc
Scris de: Simoiu Robert din Martie 16, 2011, 08:50:45
Trimite-mi sursa prin P.M. ca sa pot sa vad de ce iei acea eroare, sunt multiple cazurile.


Titlul: Răspuns: 1031 Cmmmc
Scris de: FMI Trifan Mircea Mihai din Martie 16, 2011, 19:42:38
mersi mult, am rezolvat intre timp
aveam totusi o impartire la 0, mai exact aveam pentru ciur un vector declarat global cu cateva pozitii in plus decat cate aveam nevoie si ajungea acolo.


Titlul: Răspuns: 1031 Cmmmc
Scris de: Valentin Harsan din Iunie 28, 2011, 14:28:58
se poate uita cineva pe sirsa mea?  nu reusesc sa vad ce e gresit  ](*,)
am luat testele de la olimpiada si par sa mearga. nu vad vreo diferenta dar totusi iau 40 pe infoarena.

Cod:

#include<iostream>
#include<fstream>
#define N 500000
using namespace std;

ifstream in("cmmmc.in");
ofstream out("cmmmc.out");

int solmin=100000,sol1,sol2,nrp[144000],nr,fact[400],pu[400],n,sol[400];
bool z[N];

void erat() {
int i,j;

for(i=2;i*i<N;++i) {
if(!z[i]) {
nrp[++nr]=i;
for(j=2*i;j<N;j+=i)
z[j]=true;
}
}

for(;i<N;++i)
if(!z[i])
nrp[++nr]=i;
}

void ver() {

int i,nu1=1,nu2=1;

for(i=1;i<=n;++i) {
if(sol[i]==0)
nu1*=fact[i];
else
nu2*=fact[i];
}

if(nu1+nu2<solmin) {
solmin=nu1+nu2;
sol1=nu1; sol2=nu2;
if(sol1>sol2)
swap(sol1,sol2);
}
}

void back(int q) {

int i;

if(q==n+1) {
ver();
return;
}

for(i=0;i!=2;++i) {
sol[q]=i;
back(q+1);
}
}

int cmmmc(int p) {

int i,nrr=1;

n=0; solmin=100000;

for(i=1;i<=nr;++i) {
if(p%nrp[i]==0) {
fact[++n]=1;
pu[n]=0;
while(p%nrp[i]==0) {
p/=nrp[i];
++pu[n]; fact[n]*=nrp[i];
}
nrr*=(2*pu[n]+1);
}
}

if(p!=1) {
fact[++n]=p;
pu[n]=1;
nrr*=3;
}

nrr=(nrr+1)>>1;

back(1);

return nrr;

}

int main() {

int i,ni,k;

erat();

in >> k;

for(i=1;i<=k;++i) {
in >> ni;

out << cmmmc(ni) << " " << sol1 << " " << sol2 << "\n";
}

return 0;
}


Titlul: Răspuns: 1031 Cmmmc
Scris de: cont cu nume gresit sau fals din Iunie 28, 2011, 14:50:25
pare ca pe prima linie din fisierul de iesire la tine ambele numere sunt 0

pe exemplu iti da:
Cod:
5 0 0
2 2 5

inlocuieste afisarea cu
Cod:
out << cmmmc(ni) << " ";
out <<sol1<<" "<<sol2<<"\n";

merge de 70 asa, mai vezi si tu dupa :)
succes


Titlul: Răspuns: 1031 Cmmmc
Scris de: Valentin Harsan din Iunie 28, 2011, 14:53:36
multumesc pentru sfat  \:D/
sti ce problema putea avea afisarea? ca la mine dadea bine si se vedea si prima linie


Titlul: Răspuns: 1031 Cmmmc
Scris de: cont cu nume gresit sau fals din Iunie 28, 2011, 14:58:57
cred ca ai o versiune mai veche de compilator

ideea e ca sol1 si sol2 erau modificate dupa afisare

p.s.:compilatorul modifica pe toate linile nu numai pe prima, dar mie imi sarisera in ochi numai zerourile :)