Witam, rozwiązałem zadanie Makowce i Keksy z VII OIG. napisałem taki kod. Ale dostałem tylko 10 punktów. Mogli byście mi powiedzieć czy wina jest algorytmu czy implementacji?? Zadanie w załączniku. Oto kod:
#include <iostream>
using namespace std;
struct obiekt
{
unsigned int skladniki[100000];
unsigned int maks[100000];
};
int skladniki[100000];
int N,M=0,K=0;
obiekt mak;
obiekt keks;
void read()
{
cin>>N;
for(int i=0;i<N;i++) cin>>skladniki[i];
for(int i=0;i<N;i++) cin>>mak.skladniki[i];
for(int i=0;i<N;i++) cin>>keks.skladniki[i];
}
int main()
{
read();
for(int i=0;i<N;i++)
{
mak.maks[i]=0;
keks.maks[i]=0;
if(mak.skladniki[i]!=0)
{
mak.maks[i]=skladniki[i]/mak.skladniki[i];
if(mak.maks[i]<M && mak.maks[i]!=0 || M==0) M=mak.maks[i];
}
if(keks.skladniki[i]!=0) keks.maks[i]=skladniki[i]/keks.skladniki[i];
{
if(keks.maks[i]<K && keks.maks[i]!=0 || K==0) K=keks.maks[i];
}
}
if(M>K)
{
for(int i=0;i<N;i++)
{
keks.maks[i]=0;
if(keks.skladniki[i]!=0)
{
keks.maks[i]=(skladniki[i]-(mak.skladniki[i]*M))/keks.skladniki[i];
if(keks.maks[i]<K || K==0)
{
K=keks.maks[i];
if(K==0)
{
break;
}
}
}
}
}
else if(K==M)
{
int K1,M1;
for(int i=0;i<N;i++)
{
if(mak.skladniki[i]!=0)
{
mak.maks[i]=0;
mak.maks[i]=(skladniki[i]-(keks.skladniki[i]*K))/mak.skladniki[i];
if(mak.maks[i]<K || M1==0)
{
M1=mak.maks[i];
if(M1==0)
{
break;
}
}
}
}
for(int i=0;i<N;i++)
{
keks.maks[i]=0;
if(keks.skladniki[i]!=0)
{
keks.maks[i]=(skladniki[i]-(mak.skladniki[i]*M))/keks.skladniki[i];
if(keks.maks[i]<K || K1==0)
{
K1=keks.maks[i];
if(K1==0)
{
break;
}
}
}
}
if(M1+K<M+K1)
{
K=K1;
}
else
{
M=M1;
}
}
else
{
for(int i=0;i<N;i++)
{
if(mak.skladniki[i]!=0)
{
mak.maks[i]=0;
mak.maks[i]=(skladniki[i]-(keks.skladniki[i]*K))/mak.skladniki[i];
if(mak.maks[i]<K || M==0)
{
M=mak.maks[i];
if(M==0)
{
break;
}
}
}
}
}
cout<<M+K;
return 0;
}
- makowceikeksy.pdf (518 KB) - ściągnięć: 227
Shalom