湖南省第十屆程式設計競賽第一題 點到圓弧的距離

2021-06-26 08:09:11 字數 1442 閱讀 7020

分別輸入起始點a,經過的點b,和結束點c的圓弧,問點p的位置到這段圓弧的最短距離是多少。

測試資料

樣例輸入:                    樣例輸出:

0 0 1 1 2 0 1 -1              case 1: 1.414

3 4 0 5 -3 4 0 1              case 2: 4.000

解法:先用3個方程求出圓的方程求出圓心(x0,y0)以及圓的半徑sqrt(r)。然後不知是三分還是二分。從兩端點位置開始列舉尋找。更新圓弧兩端點中心位置mid,如果左邊端點到p點距離近就使右邊端點更新為mid,反之亦然。找中心位置mid的時候,用相似三角形和點繞點旋轉90度的方法找到mid點。特殊情況需要判斷點在兩端點構成線段的左右位置。

#include #include #include #include #include #include #include #include #include #include #include #include #define ll __int64

#define eps 1e-8

using namespace std;

double x0,x1,x2,x3,px,py,y0,y1,y2,y3,r;

int flag;

struct point

};int dcmp(double x)

point go(point v,point l,point r)

else

else

}printf("case %d: %lf\n",cas++,ans);

} return 0;

}

我們其實不需要用精度計算。只需要判斷p點到圓心是否在圓的起始點經過中點到終點的角度,如果在角度範圍內則最下距離為圓心距離到p點距離減去半徑的絕對值,不在則為起始點或終點到p點兩者的最小距離。

ac**:

#include #include #include #include #include #include #include #include #include #include #include #include #define ll __int64

#define eps 1e-8

using namespace std;

double x0,x1,x2,x3,px,py,y0,y1,y2,y3,r;

int flag;

struct point

};int dcmp(double x)

point go(point v,point l,point r)

else

else

}else

else

}printf("case %d: %.3lf\n",cas++,ans);

} return 0;

}

湖南省2010程式設計大賽第一題

超級水題。不解釋!題目 題目a 汽水瓶有這樣一道智力題 某商店規定 三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?答案是5瓶,方法如下 先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完以後4個空瓶子,用3個再換一瓶,喝掉這瓶滿的,這時候剩2個空瓶子。然後你讓老闆先借給你一...

第十屆浪潮杯山東省ACM程式設計競賽總結

5.11 5.12 濟南大學,蒟蒻的一場acm表演 開幕式上有石教授的精彩發言,中國石油大學張學輝教練的一句話至今猶言在耳 近十年來,許多學生通過acm圓了清北夢。我的感覺 acm是乙個讓人拿得起卻又放不下的東西,曾經為acm而痛苦,可是想到背後的林林總總,卻從沒有輕言放棄。濟南大學八食堂的飯菜好評...

山東省第十屆浪潮杯L題

題目大意 有n個數 然後是m排,每排都是給了乙個大小關係 前面乙個大於後面乙個 然後找中位數 可以用floyd 跑 找出之間的關係 然後看前後的數是不是n 2就 ok了。include include includeusing namespace std int mp 105 105 int vis...