日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jzoj3736-[NOI2014模拟7.11]数学题(math)【计算几何】

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jzoj3736-[NOI2014模拟7.11]数学题(math)【计算几何】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題


題目大意

給定兩個向量a=(x1,y1),b=(x2,y2)a=(x_1,y_1),b=(x_2,y_2)a=(x1?,y1?),b=(x2?,y2?),然后求∣λ1a+λ2b∣|\lambda _1a+\lambda _2b|λ1?a+λ2?b的最小值,要求λ1,λ2\lambda_1,\lambda _2λ1?,λ2?不同時為0。


解題思路

我們先考慮若a,ba,ba,b的夾角大于90°90^{\circ}90°那么我們就讓λ1\lambda_1λ1?λ2\lambda_2λ2?取負數使得他們夾角在1~90°1\sim 90^{\circ}190°

然后我們分兩種情況討論:

  • 向量a,ba,ba,b的夾角大于等于60°60^{\circ}60°
    這時推導
    ∣ax+by∣=∣ax∣2+∣by∣2+2?∣ax∣∣by∣cos?α>=∣ax∣2+∣by∣2?2?∣ax∣∣by∣cos?α|ax+by|=|ax|^2+|by|^2+2?|ax||by|\cos\alpha >=|ax|^2+|by|^2?2?|ax||by|\cos\alphaax+by=ax2+by2+2?axbycosα>=ax2+by2?2?axbycosα
    因為向量x,yx,yx,y滿足夾角大于等于60°60^{\circ}60°,所以2cos?α&lt;=12\cos \alpha&lt;=12cosα<=1,不會影響答案我們將其去掉
    ∣ax+by∣&gt;=∣ax∣2+∣by∣2?∣ax∣∣by∣&gt;=(∣ax∣?∣by∣)2+∣ax∣∣by∣|ax+by|&gt;=|ax|2+|by|^2?|ax||by|&gt;=(|ax|?|by|)^2+|ax||by|ax+by>=ax2+by2?axby>=(ax?by)2+axby
    ∣ax+by∣2=(∣ax∣?∣by∣)2+∣ax∣∣by∣|ax+by|^2=(|ax|?|by|)^2+|ax||by|ax+by2=(ax?by)2+axby
    所以答案就是xxxyyy中較大的那個
  • 其他情況:
    我們發現∣ax+by∣=∣a(x?ky)+(b+ak)y∣|ax+by|=|a(x-ky)+(b+ak)y|ax+by=a(x?ky)+(b+ak)y所以b?b+a?kb\Rightarrow b+a*kb?b+a?k可以進行轉換
    那么我們考慮這種轉換的最優性
    這一段證明較長,我就放論文了QvQQvQQvQ

  • codecodecode

    #include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define sqr(x) ((x)*(x)) using namespace std; ll x1,y1,x2,y2,a,b,t; void dg(ll x1,ll y1,ll x2,ll y2) {ll x=(x1*x2+y1*y2),l1=sqr(x1)+sqr(y1),l2=sqr(x2)+sqr(y2);bool bz;if(x<0){dg(-x1,-y1,x2,y2);a=-a;return;}if(sqr(x)*4<l1*l2||!x){if(l1>l2) b=1;else a=1;return;}if(l1<l2) swap(x1,x2),swap(y1,y2),bz=1;else bz=0;swap(l1,l2);ll t=x/l2,k=t+1;if(x-t*l2<=k*l2-x&&t){dg(x1-t*x2,y1-t*y2,x2,y2);b=b-t*a;}else{dg(x1-k*x2,y1-k*y2,x2,y2);b=b-k*a;}if(bz) swap(a,b); } int main() {freopen("math.in","r",stdin);freopen("math.out","w",stdout);while(scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2)!=EOF){a=b=0;dg(x1,y1,x2,y2);t=sqr(a*x1+b*x2)+sqr(a*y1+b*y2);printf("%lld\n",t);} }

    總結

    以上是生活随笔為你收集整理的jzoj3736-[NOI2014模拟7.11]数学题(math)【计算几何】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。