天天看點

cf593c

題意:有n(n<=50)個圓,給出每個圓的圓心坐标和半徑r(r>=2)。

求兩個函數f(t),g(t),t的取值為0到50的整數,每次令x=f(t),y=g(t),産生一個51個點的集合。要求這個點集對于每個圓至少有一個點落在圓内或圓周上。

g和f中隻能使用常數,加法,乘法,減法,絕對值運算。

輸出f和g。

分析:我們設計這樣一個多項式,包含n項,當t取值為i的時候,隻有第i項的值不為0。其餘項均為0。

設計方案是每項都乘以這樣一個系數,第i項需要乘以系數1/2×( 1-abs(t-i) + abs( 1 - abs(t-i) ) )。

當隻有當i==t的時候該系數才不為0。

原理如下:如果我們設a=1-abs(t-i)的話,那麼系數就是(a+abs(a))/2。

當i=1時,a和abs(a)關于未知數t的圖像如下圖所示。兩者相加隻有中間的重疊部分不會抵消。

cf593c

這樣我們就讓f(t)=sigma(xi/2×( 1-abs(t-i) + abs( 1 - abs(t-i) ) )),由于圓的半徑至少為2,是以xi/2取整帶來的誤差不會産生影響。

g(t)同理。

cf593c
cf593c

view code