2011年2月17日 星期四

Codeforces #1 C Ancient Berland Circus

題意﹕給了三點,若它屬於一正N邊形上的頂點,問能組成的所有正N邊形中最小面積是多少?保証 3 <= N <= 100。

最初我的想法是預計算了長度為1的三角形至正100邊形的向量,然後選取C(3, 2)點對來試,再枚舉是第1和第i頂點的話能否組成一K邊型並且以其餘那點作頂點。

今晚跟kn討論過後,得出一個異常簡單的算法﹕找外接圓,然後循圓心來枚舉3~100邊形即可。

卡了精度,最主要是我考慮圓心和任意點對的角被2pi/K能否整除。寫了一個很頹的函數﹕

bool isInt(double x){
return fabs(int(x+eps)-x) <= eps;
}

eps = 1e-9 連case 2都過不了。試eps = 1e-8又過不了case 4。再試低一點…直至eps = 1e-4,Accepted。
主因應該是輸入精度只有六個小數位…用eps太小反而會要求過高。

沒有留言: