- Ја почнал/а темата
- #1
Решавам проблеми на USACO, и точно ја решив задачата, ги дава точните резултати на сите тест примери кај мене, без да го премине временскиот лимит и меморија, ама кога ја пратив на online judge ми кажува
Ако знае некој што има искуство во C++ да ми помогне да сфатам зошто кажува memory violation на тој компајлер иако кај мене работи одлично. Инаку дебагирав малку и можеби проблемот е некаде во првиот else дел од while циклусот. Поздрав
Таму се работи под Линукс платформа и не е толку комплицирана програмата за да работи со еден а да не работи со друг компајлер. Јас користам DevCpp. Еве го кодот од програмата> Run 1: Execution error: Your program (`checker') exited with
signal #11 (segmentation violation [maybe caused by accessing
memory out of bounds, array indexing out of bounds, using a bad
pointer (failed open(), failed malloc), or going over the maximum
specified memory limit]). The program ran for 0.000 CPU seconds
before the signal. It used 2712 KB of memory.
Код:
#include<iostream>
using namespace std;
int dver(int i,int j,int N) {
return(i+j-1);
}
int dhor(int i,int j,int N) {
return(N-(i-j));
}
int main() {
int H[14],V[14],DH[28],DV[28];
int rez[14],p,i,j,N,va=0,counter=0;
cin>>N;
for (i=1;i<=N;i++) {
H[i]=0;
V[i]=0;
}
for (i=1;i<=2*N-1;i++) {
DH[i]=0;
DV[i]=0;
}
rez[1]=1;
rez[2]=0;
// 0=not valid,1=valid
va=0;
H[1]=1;
DV[1]=1;
DH[N]=1;
// level p is given position
p=2;
while (p>0) {
// if the position is valid
if (va==1) {
if (p<N) {
p=p+1;
rez[p]=0;
va=0;
} else {
counter++;
if (counter<=3) {
for (i=1;i<=N;i++) {
cout<<rez[i]<<" ";
}
cout<<"n";
}
va=0;
// delete the traces
H[rez[p]]=0;
DV[dver(p,rez[p],N)]=0;
DH[dhor(p,rez[p],N)]=0;
}
} else {
// if the position is not valid
if (rez[p]==N) {
p=p-1;
va=0;
if (p>0) {
// delete the traces
H[rez[p]]=0;
DV[dver(p,rez[p],N)]=0;
DH[dhor(p,rez[p],N)]=0;
}
} else {
rez[p]=rez[p]+1;
if (H[rez[p]]==0) {
if ((DV[dver(p,rez[p],N)]==0)&&(DH[dhor(p,rez[p],N)]==0)) {
va=1;
// add traces
H[rez[p]]=1;
DV[dver(p,rez[p],N)]=1;
DH[dhor(p,rez[p],N)]=1;
}
}
}
}
}
cout<<counter<<"n";
return 0;
}