50個點,每個點有乙個恆定速度,給定乙個時刻t
求找到所有特殊的時間點: 只有在存在三點共線的時候凸包上的點才會改變。
如果凸包上的點保持不變,其面積隨時間變化是乙個一元二次函式(考慮相鄰兩點的位置向量是乙個關於時間的一次函式,叉乘後得到乙個一元二次的式子)。
所以求出a,b,c後求積分即可。求a,b,c時可以取開始時間點,結束時間點,再取乙個中間點。這個過程在網上看的**,比較巧妙。。
精度問題,
除以2 用乘以0.5代替
#include #include #include #include #include #include #include #include #define pb push_back
#define sqr(x) ((x)*(x))
#define cube(x) ((x)*(x)*(x))
using namespace std;
const double eps = 1e-9;
const int maxn = 50;
int n, t;
vectort;
int dcmp(double x)
struct point
point(double xx, double yy):x(xx), y(yy){}
void input()
friend point operator + (const point& a, const point& b)
friend point operator - (const point& a, const point& b)
friend double operator * (const point& a, const point& b)
friend point operator * (const point& a, const double& k)
friend bool operator < (const point& a, const point& b)
int pre=m;
for (int i=n; i; i--)
return m;
}void get_abc(double& a, double& b, double& c, int i, int j, int k)
void solve(double a, double b, double c)
return;
}double delta = b*b - 4*a*c;
if (delta<0) return;
if (!dcmp(delta))
double tmp = sqrt(delta);
x = (-b+tmp)*0.5/a;
if (x>=0 && x<=t) t.pb(x);
x = (-b-tmp)*0.5/a;
if (x>=0 && x<=t) t.pb(x);
}int main()
t.clear();
t.pb(0); t.pb(t);
for (int i=1; i<=n; i++)
for (int j=i+1; j<=n; j++)
for (int k=j+1; k<=n; k++)
int tot=t.size();
sort(t.begin(), t.end());
double ans=0;
for (int i=0; i
hdu2045 c語言詳解
因為格仔數為1,2,3時為特殊情況,所以從4開始考慮,分為兩種情況,第一種情況 當第n 1個格仔與第乙個格仔不同時,因為題目要求第乙個格仔和最後乙個不相同,所以此時巧好能看成總共只有n 1個格仔,然後又回到有n格仔時,第n個格仔因為不和第乙個和第n 1個格仔相同,當第n 1個格仔和第乙個格仔確定時,...
hdu2043 密碼(C語言)
problem description 網上流傳一句話 常在網上飄啊,哪能不挨刀啊 其實要想能安安心心地上網其實也不難,學點安全知識就可以。首先,我們就要設定乙個安全的密碼。那什麼樣的密碼才叫安全的呢?一般來說乙個比較安全的密碼至少應該滿足下面兩個條件 1 密碼長度大於等於8,且不要超過16。2 密...
HDU 1004(C語言描述)
let the balloon rise 輸入輸入包含多個測試用例。每個測試用例都以數字 n 0 n 1000 為起點,分布的氣球總數。下 n 行包含乙個顏色。氣球的顏色是乙個多達15個小寫字母的字串。帶有 n 0 的測試用例終止輸入,並且不處理此測試用例.輸出對於每種情況,在單行上列印最流行問題的...