2018專題集訓一 第一部分(二分,三分,尺取)

2021-09-10 01:56:44 字數 3419 閱讀 1615

[題目鏈結] :

尺取法:又叫做雙指標,適合用來求一段連續的子區間

可以在o(n)的時間得出類似的求一段連續子區間的解

接下來讓我們來看看模板題

a題:在一段n個正整數的序列中,找個一段連續大於等於m的子串行
題解:直接套模板

#include

#include

#include

using

namespace std;

int a[

100005];

intmain()

int i=

0,j=

0,ans=

100005

,sum=0;

while(1

)if(sumbreak

; ans=

min(ans,j-i)

; sum-

=a[i++];

}if(ans<

100005

)else cout<<

"0"<}return0;

}

b題:求1-n中哪一段子區間的平方和等於s
#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

struct node

t[1000005];

intmain()

if(sum==n)

sum-

=i*i;

i++;}

cout

int i=

1;i<=ans;i++

) cout

}

二分的複雜度可以將複雜度降為log2 n

需要注意的是應用二分需要是一段具有單調性的區間,每次取l,r中點與所找的元素比較,若過大,則右邊界變為中點,反之則左邊界變為中點,直至找到答案

二分的難點主要在於如何設定判斷條件

看題

c題意:給出n個位置,選出其中m個位置,使得m個位置之間的最短距離最大。
題解:先對位置進行排序,使左邊界為0,右邊界為大於距離最大的可能。然後不斷二分直到符合條件

#include

using

namespace std;

typedef

long

long ll;

ll a[

100005];

int n,c;

bool

check

(int mid)}if

(sum>=c)

return1;

else

return0;

}int

main()

sort

(a+1

,a+1

+n);

ll l=

1,r=a[n]

-a[1];

while

(l<=r)

else r=mid-1;

} cout<1<}

d題:一根棍子橫立與兩面牆之間,當棍子受熱膨脹後會彎成弓形

(可以看做圓弧的一部分),求彎曲的棍子與原棍子的中點的距離。

這道題考察二分與計算幾何,因為所求得的結果是浮點數,而不是整數,要注意誤差r-l>=eps,一般eps1e-6足夠了,但有的毒瘤題需要1e-8或1e-10才能過,而且eps開得太小有可能tle

這題對所求距離進行二分,聽說別的同學對角度進行二分一直過不了。

列出三條方程得到r與所求距離的關係式。

**:

#include

#include

#include

#include

#include

using

namespace std;

double newl;

double l,c,n;

bool

check

(double mid)

intmain()

printf

("%.3f\n"

,r);

}return0;

}

f題:考察二分互動題
這是我做的第一道互動題,題目本身不難,但是與平常所做的題不同的是,角色交換了過來,我問他回答

需要注意的是每次輸入後都要fflush(stdout),清空一下,或者用endl自帶清空

**如下

#include

using

namespace std;

typedef

long

long ll;

intmain()

return0;

}

三分與二分的區別在於二分所解決的是一段單調序列,而三分可以用來解決一段既有單調遞增又有單調遞減的序列。做法與二分差不多,取兩個點為l=l+(r-l)/3.0與r=r-(r-l)/3.0

e題:三分模板題,求乙個n個二次函式在區間[0,100]的最小值中的最小值
這道題本身不難,但是沙雕的我定義了兩次三分點,在剛開始定義一次,在迴圈裡又定義了一次,導致wa了十多次都找不出錯誤,最後去問ksf,才解決的

直接上**:

#include

#include

#include

#include

#include

using

namespace std;

double a[

10005

],b[

10005

],c[

10005];

intmain()

double l=

0,r=

1000

,lm,rm;

while

(r-l>

1e-10)if

(maxlelse l=lm;

}double maxx=a[1]

*lm*lm+b[1]

*lm+c[1]

;for

(int i=

2;i<=n;i++

)printf

("%.4lf\n"

,maxx);}

return0;

}

spring專題 第一部分IOC 一)

ioc簡單介紹 ioc被稱作控制反轉,也被稱為依賴注入 di 是spring中重要的一部分,它是spring框架的重要組成之一,我們可以將ioc比作乙個容器,而它的作用就是幫助我們new 物件,管理物件的。控制反轉理解 那麼我將自己對控制反轉的理解簡單說一下,控制反轉其實是spring中的一種機制,...

Axure RP 第一部分

axure rp是乙個專業的快速原型設計工具。axure 發音 ack sure 代表美國axure公司 rp則是rapid prototyping 快速原型 的縮寫。axure rp是美國axure software solution公司旗艦產品,是乙個專業的快速原型設計工具,讓負責定義需求和規格...

CVPR 2018摘要 第一部分

neuronuggets cvpr 2018 in review,part i 作者 sergey nikolenko aleksey artamonov 翻譯 老趙 校對 李晶 整理 菠蘿妹 neuronuggets cvpr 2018年回顧,第一部分 在neuromation,我們一直在尋找有助...