void testCases(FILE *ptr_input, FILE *ptr_output){ char buffer[1000], space[2] = " "; int num_test_cases = 0, case_num = 1; char *output = (char*) malloc(50); if(fgets(buffer, 1000, ptr_input)!=NULL){ num_test_cases = atoi(buffer); printf("%d test cases:\n",num_test_cases); } while(case_num<=num_test_cases&&fgets(buffer,1000,ptr_input)!=NULL){ int first_answer, second_answer, i=1,j=0; int first_row [5], second_row[5]; //read input first_answer = atoi(buffer); while(i<=4){ fgets(buffer,1000,ptr_input); if(i==first_answer){ lineToArray(buffer,first_row,4); } i++; } fgets(buffer,1000,ptr_input); i=1,j=0; second_answer = atoi(buffer); while(i<=4){ fgets(buffer,1000,ptr_input); if(i==second_answer){ lineToArray(buffer,second_row,4); } i++; } //process data processData(first_row,second_row,output); //write output fprintf(ptr_output,"Case #%d: %s\n",case_num, output); case_num++; } free(output); }
void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseScale, bool outline) { const QPointF* const points = reinterpret_cast<const QPointF*>(path.points()); const QPainterPath::ElementType* const elements = path.elements(); if (boundingRectDirty) { minX = maxX = points[0].x(); minY = maxY = points[0].y(); boundingRectDirty = false; } if (!outline && !path.isConvex()) addCentroid(path, 0); int lastMoveTo = vertexArray.size(); vertexArray.add(points[0]); // The first element is always a moveTo do { if (!elements) { // qDebug("QVectorPath has no elements"); // If the path has a null elements pointer, the elements implicitly // start with a moveTo (already added) and continue with lineTos: for (int i=1; i<path.elementCount(); ++i) lineToArray(points[i].x(), points[i].y()); break; } // qDebug("QVectorPath has element types"); for (int i=1; i<path.elementCount(); ++i) { switch (elements[i]) { case QPainterPath::MoveToElement: if (!outline) addClosingLine(lastMoveTo); // qDebug("element[%d] is a MoveToElement", i); vertexArrayStops.add(vertexArray.size()); if (!outline) { if (!path.isConvex()) addCentroid(path, i); lastMoveTo = vertexArray.size(); } lineToArray(points[i].x(), points[i].y()); // Add the moveTo as a new vertex break; case QPainterPath::LineToElement: // qDebug("element[%d] is a LineToElement", i); lineToArray(points[i].x(), points[i].y()); break; case QPainterPath::CurveToElement: { QBezier b = QBezier::fromPoints(*(((const QPointF *) points) + i - 1), points[i], points[i+1], points[i+2]); QRectF bounds = b.bounds(); // threshold based on same algorithm as in qtriangulatingstroker.cpp int threshold = qMin<float>(64, qMax(bounds.width(), bounds.height()) * 3.14f / (curveInverseScale * 6)); if (threshold < 3) threshold = 3; qreal one_over_threshold_minus_1 = qreal(1) / (threshold - 1); for (int t=0; t<threshold; ++t) { QPointF pt = b.pointAt(t * one_over_threshold_minus_1); lineToArray(pt.x(), pt.y()); } i += 2; break; } default: break; } } } while (0); if (!outline) addClosingLine(lastMoveTo); vertexArrayStops.add(vertexArray.size()); }