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...