2020牛客寒假演算法基礎集訓營5(B題 和J題)

2021-10-02 19:23:11 字數 1978 閱讀 6881

b題

平面上有n個點,在x軸上取乙個點(x0,0),使得這n個點中,每個點到(x0,0)的最大距離最小(1<=n<=1e5,-1e4<=x,y<=1e4)

題解:開始我想了想二分,好像不太行(其實是我太菜了),然後想到圓…然後就wa了幾個小時,這是一道求極小值的題目,可以容易知道,任意兩個點(lx,0)和(rx,0),其中lx<=x0<=rx,f(lx)>=f(x0)&&f(rx)>=f(x0),這就是乙個極值點的問題,悔恨當初我學的時候偷懶沒敲三分法…所以說還是要穩打穩紮的學

#include

#define ll long long

#define ull unsigned long long

#define ld long double

#define rep1(i,n) for(int i=1;i<=n;i++)

#define rep0(i,n) for(int i=0;i#define rep(i,l,r) for(int i=l;i<=r;i++)

using

namespace std;

const ll mod=

1e9+7;

const

int maxn=

1e5+7;

int n;

struct p

a[maxn]

;double

check

(double x)

return mx;

}double

tsearch

(double l,

double r)

return mid;

}int

main()

f題

題目:有一行格仔,有兩種填充方式,一種是填充a,填充a佔1格,另外是填充r,填充乙個r要佔連續的x(2<=x<=1e5)格,有乙個限制條件就是r不能連續填充,有q次詢問,每次問乙個區間[l,r](1<=l<=r<=1e5),給你r個格仔,問在隨意填充完[1,l-1]後填充[l,r]的方案數

感想:首先吐槽一下這題目真的很(髒話) …我看了10min才看懂要講什麼,當然看懂題目以後一眼就看出是一道典型的計數dp題目,只不過我做的題目少,所以就不太會設方程,剛我的思路是設個dp[i]為第i個格仔的方案數,然後列出方程就是dp[i]=dp[i-x]+i…,然後死活編不下去,就放棄了…

題解:首先這一類dp一定要記住,有兩種填充方式,因此肯定是有兩種狀態,這裡設dp[i][1]和dp[i][0],dp[i][0]表示前i個格仔的最後乙個字母填充a,dp[i][1]表示前i個格仔最後乙個填充r,若第k-1個字母是r,顯然第k個字母只能填充a,若第k-1個字母是a,顯然填r和填a都可以,得到dp方程就是如下

dp[i][0]=dp[i-1][0]+dp[i-1][1],dp[i][1]=d[i-x][0]

初始狀態dp[0][0]=1,dp[0][1]=0;

然後對於每次詢問其實就是預處理字首和回答sum[r]-sum[l-1]

#include

#define ll long long

#define ull unsigned long long

#define ld long double

#define rep1(i,n) for(int i=1;i<=n;i++)

#define rep0(i,n) for(int i=0;i#define rep(i,l,r) for(int i=l;i<=r;i++)

using

namespace std;

const ll mod=

1e9+7;

const

int maxn=

1e5+7;

ll dp[maxn][2

],sum[maxn]

;int q,x;

intmain()

while

(q--

)return0;

}

2020牛客寒假演算法基礎集訓營

長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...

2020牛客寒假演算法基礎集訓營1

找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...

2020牛客寒假演算法基礎集訓營1

h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...