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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FJUT寒假第一周作业浮点数查寻题解

發布時間:2024/8/26 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FJUT寒假第一周作业浮点数查寻题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分強化——浮點數序列查詢

TimeLimit:4000MS??MemoryLimit:128MB 64-bit integer IO format:%I64d Problem Description

已知在二維空間中有n個點,p0,p1……pn-1

已按照x為第一優先級,y為第二優先級從大到小排好序;

即若 pi<pj

則pi.x<pj.x,或者pi.x==pj.x&&pi.y<pj.y

Input

只有一組數據
第一行是兩個整數n,m分別代表點的個數和查詢次數
接下來n行,每行有二個帶三位小數的浮點數x,y代表一個點的坐標
再接下來m行,每行的有4個數字x1,y1,x2,y2代表p1,p2且p1>=p2

其中n,m<=100000;

任意0<=x,y<10^6;

Output

輸出n個點所有小于等于p1且大于等于p2的點的下標之和

SampleInput 6 4 125.689 125.689 125.689 125.688 125.688 125.689 125.688 125.689 125.688 125.688 125.688 125.688 125.688 125.688 125.688 125.688 125.688 125.689 125.688 125.688 125.689 125.689 125.688 125.689 125.688 125.689 125.688 125.689 SampleOutput 9 14 6 5
  首先第一思路一個一個比較,當由于數據龐大且有從大到小排列的小提示,顯然是二分。之后就是構建數組寫二分函數。
  構建數組有個小技巧,把第一優先級乘一個較大的數,次優先級乘較小數獲得的一個數字。恰好符合題目的比較條件。之后利用二分上下界函數找數字之間個數就完成了。接下來是這題的小細節,浮點數精度缺失的問題。

?

浮點數運算都會有精度缺失,轉換整型也會有缺失。只是缺失比較小。當數據大的時候誤差就出現了。

這題將兩個浮點數整合為整數就可能遇到這個問題。

注意運算先后可能發生的精度缺失,然后用0.1補精度這一小技巧成功AC。(乘1000后,最小分度為1)。

另外1e9是浮點數,也會有進度缺失,最好改1000000000.這題被我水過去

最后附上這題我的二分函數,及調用。最后記得連續下標和是一個等差數列

long long f(ll *arr,int len,double x) {long long r=-1,l=len,mid;while(r+1<l){mid=(r+l)/2;if(arr[mid]>x){r=mid;}else{l=mid;}}return l; } View Code i=f(arr,n,p1);j=f(arr,n,p2-1);sum=(i+j-1)*(j-i)/2; View Code

?

?


?

?

轉載于:https://www.cnblogs.com/Q1143316492/p/6293044.html

總結

以上是生活随笔為你收集整理的FJUT寒假第一周作业浮点数查寻题解的全部內容,希望文章能夠幫你解決所遇到的問題。

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