Odrazu, na początku zaznaczam że wstawiam cały kod ale nie działającego, nie w pełni zbudowanego programu, gdzie wszystko z góry jest podpisane, sama funkcja nie jest dokończona. Grunt powiedzieć że wydaje mi się że jest to wystarczający mały (i pewnie brzydko napisany) fragment programu by nie podchodził pod regulamin wstawiania problemów ze SPOJ-a.
Problem z którym tutaj przychodzę to zamiana wartości mx gdy aktywna jest linijka 141 (Pk[i][n[i]]=a[j]*i+b[j];), z poprawnych, na kompletnie arbitralne. Nie wiem w jak sposób ta linijka może na nie wpływać (być może wychodzi ona poza przestrzeń tablicy, nie mam pojęcia) przez co nie wiem także jak to naprawić (poza przebudowaniem programu tak by zniwelować tę linijkę, ale wtedy nie wyniosę z tego żadnej nowej wiedzy jak sobie z czymś takim radzić ;// )


//Karol Chadzynski
//Tytuł Projektu: Krol Bajtelek
/*
*/
#include <iostream>
using namespace std;
const int MAX=20000;
struct wsp
{
int x;
int y;
};
int wczyt1(wsp T[])
{
int a,b,c=0;
cin>>a;
cin>>b;
for(int j=0;j<MAX;j++)
{
cin>>T[j].x;
cin>>T[j].y;
c++;
if(T[j].x==a&&T[j].y==b)
{
break;
}
}
return c;
}
/*
void wyp1(int n,wsp T[][MAX],int Pc[],int Ps[])
{
for(int i=0;i<n;i++)
{
cout<<"Dla rysunku["<<i<<"]:\n";
for(int j=0;j<Pc[i];j++)
{
cout<<"["<<j<<"]=("<<T[i][j].x<<";"<<T[i][j].y<<")";
}
cout<<"\n";
for(int j=0;j<Ps[i];j++)
{
cout<<"["<<j<<"]=("<<T[i][j].x<<";"<<T[i][j].y<<")";
}
cout<<"\n";
}
}
*/
int minx(int P, wsp T[])
{
int a;
a=T[0].x;
for(int i=0;i<P;i++)
{
a>T[i].x ? a=T[i].x : NULL;
}
return a;
}
int maxx(int P, wsp T[])
{
int a;
a=T[0].x;
for(int i=0;i<P;i++)
{
a<T[i].x ? a=T[i].x : NULL;
}
return a;
}
double oblicz(int P, wsp T[])
{
//wyznaczenie funkcji ax+b
int a[P];
int b[P];
for(int i=0;i<P;i++)
{
if(i==0&&(T[i].x-T[P-1].x)!=0)
{
a[i]=(T[i].y-T[P-1].y)/(T[i].x-T[P-1].x);
b[i]=(-((T[P-1].x*(T[i].y-T[P-1].y))/(T[i].x-T[P-1].x))+T[P-1].y);
//cout<<a[i]<<"*x + "<<b[i]<<"\n";
}
else if((T[i].x-T[i-1].x)!=0)
{
a[i]=(T[i].y-T[i-1].y)/(T[i].x-T[i-1].x);
b[i]=(-((T[i-1].x*(T[i].y-T[i-1].y))/(T[i].x-T[i-1].x))+T[i-1].y);
//cout<<a[i]<<"*x + "<<b[i]<<"\n";
}
else
{
a[i]=0;
b[i]=100001;
}
cout<<"f(x)="<<a[i]<<" + "<<b[i]<<"\n";
}
//znalezienie na osi x max i min
int Xmin, Xmax;
Xmin=minx(P,T);
Xmax=maxx(P,T);
//wyznaczanie minimum i maximum przedzialow funkcji
int mn[P],mx[P];
for(int i=0;i<P;i++)
{
if(i==0)
{
mn[i]=min(T[i].x,T[P-1].x);
mx[i]=max(T[i].x,T[P-1].x);
cout<<i<<" "<<mn[i]<<" "<<mx[i]<<"\n";
}
else
{
mn[i]=min(T[i].x,T[i-1].x);
mx[i]=max(T[i].x,T[i-1].x);
cout<<i<<" "<<mn[i]<<" "<<mx[i]<<"\n";
}
}
//Wyznaczanie wartosci punktow dla funkcji
double Pk[Xmax-Xmin][P];
int n[Xmax-Xmin];
for(int i=Xmin;i<=Xmax;i++)
{
n[i]=0;
for(int j=0;j<P;j++)
{
cout<<j<<" "<<mn[j]<<" "<<mx[j]<<"\n";
if(i>=mn[j]&&i<=mx[j]&&!(a[j]==0&&b[j]==100001))
{
n[i]+=1;
Pk[i][n[i]]=a[j]*i+b[j];
cout<<"f("<<i<<") = "<<Pk[i][n[i]]<<"\n";
}
}
}
return 0;
}
int main()
{
int n;
cout<<"Podaj liczbe rysunkow: ";
cin>>n;
wsp C[n][MAX];
wsp S[n][MAX];
int Pc[n],Ps[n]; //Liczba puntkow
cout<<"Podaj wspolrzedne punktow: ";
for(int i=0;i<n;i++)
{
Pc[i]=wczyt1(C[i]);
Ps[i]=wczyt1(S[i]);
}
//wyp1(n,C,Pc,Ps);
oblicz(Pc[0],C[0]);
/*double a;
for(int i=0;i<n;i++)
{
a=oblicz(Pc[i],C[i]);
cout<<10*a+6*(oblicz(Ps[i],S[i])-a)<<endl;;
}*/
return 0;
}
Link do zadania: https://pl.spoj.com/problems/BAJTELEK/
Pozdrawiam i dziękuję za pomoc ;)