int main(int argc, char *argv[]) { if (argc == 1){ testing(); } else if (argc > 1){ QString data; QList<Vertex> vl; QList<Vertex> poligon; if (readFile(argv[1], data)){ if (parseVertexList(data, vl)){ graham(vl, poligon); if (argc == 2){ if (!writeVertexList("OUT.TXT", poligon)) qDebug() << "Can not open file: OUT.TXT"; } else { if (!writeVertexList(argv[2], poligon)) qDebug() << "Can not open file: " << argv[2]; } } qDebug() << "Invalid input data!"; } qDebug() << "Cannot open file: " << argv[1]; } return 0; }
void test_graham::test() { QList<Vertex> resVl; QFETCH(QList<Vertex>, allVertexList); QFETCH(QList<Vertex>, res); graham(allVertexList, resVl); QVERIFY2(resVl == res, "invalin ans"); }
void init_links(Dllist *dll, int const LNK) { switch (LNK) { case LEX: copy_order(dll, STD, LEX); sort(dll->root, dll->length[LEX], dll, LEX); break; case POL: if (dll->up2date[LEX]) { copy_order(dll, LEX, POL); sort(dll->root->links[POL][FWD], dll->length[POL]-1, dll, POL); } else { init_links(dll, LEX); init_links(dll, POL); } break; case GRA: if (dll->up2date[POL]) graham(dll); else { init_links(dll, POL); init_links(dll, GRA); } break; case JAR: if (dll->up2date[POL]) jarvis(dll); else { init_links(dll, POL); init_links(dll, JAR); } break; default: printf("Error in init_links function\n"); break; } }
int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&p[i].x,&p[i].y); } graham(); p[n].x=p[0].x,p[n].y=p[0].y; double area=0; for(int i=0;i<top;i++) { area+=cross(p[stack[i]],p[stack[i+1]]); } if(area<0)area=-area; printf("%d\n",(int)area/100); return 0; }
int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif int nCase=1; while(scanf("%d",&n)==1 && n) { printf("Forest %d\n",nCase++); for(int i=0;i<n;i++) { scanf("%lf %lf %lf %lf",&p[i].x,&p[i].y,&v[i],&l[i]); } int pp=-1; int size=1<<(n); for(int i=1;i<size;i++) { cnt=0; double val=0; double len=0; int ncnt=0; bool flag=false; for(int j=0;j<n;j++) { if(!(i&(1<<j))) pt[cnt++]=p[j]; else { ncnt++; len+=l[j]; val+=v[j]; if(pp!=-1 && val>dp[pp]+eps) { flag=true; break; } } } if(flag) continue; if(cnt==0) continue; int tmp; if(cnt==2 || cnt==1) { for(int k=0;k<cnt;k++) convex[k]=pt[k]; tmp=cnt; } else tmp=graham(cnt,pt,convex); double dist=getlength(tmp,convex); dp[i]=val; extra[i]=len-dist; num[i]=ncnt; if(pp==-1 && extra[i]>eps) { pp=i; continue; } if(extra[i]<-eps) continue; if(dp[pp]>dp[i]+eps) { pp=i; } else if(dp[pp]<dp[i]-eps){} else { if(num[pp]>num[i]) pp=i; } } printf("Cut these trees:"); for(int i=0;i<n;i++) { if(pp&(1<<i)) printf(" %d",i+1); } printf("\nExtra wood: %.2f\n\n",extra[pp]); } return 0; }