数论分块练习([CF830 C]Bamboo Partition + [hdu 6395]Sequence )
文章目錄
- T1:Sequence
- title
- solution
- T2:Bamboo Partition
- title
- solution
- code
T1:Sequence
title
傳送
solution
一眼就是很裸的矩陣加速
?pl?\lfloor\frac{p}{l}\rfloor?lp??分塊矩陣加速就可以了
[BA1]×[DC?pl?010001]\begin{bmatrix} B\\ A\\ 1\\ \end{bmatrix} \times \begin{bmatrix} D&C&\lfloor\frac{p}{l}\rfloor\\ 0&1&0\\ 0&0&1 \end{bmatrix} ???BA1????×???D00?C10??lp??01????
這道題唯一算得上是坑的應該是n,pn,pn,p的大小,當p/l==0p/l==0p/l==0直接矩陣加速到底即可,注意rrr不能超過nnn
## code
T2:Bamboo Partition
title
傳送門
solution
∑i=1nd?((ai?1)%d+1)≤k∑_{i=1}^nd?((a_i?1)\%d+1)≤ki=1∑n?d?((ai??1)%d+1)≤k
=∑i=1nd?∑i=1n(ai?1??ai?1d??d+1)≤k=\sum_{i=1}^nd-\sum_{i=1}^n(a_i-1-\lfloor\frac{a_i-1}ze8trgl8bvbq\rfloor*d+1)\le k=i=1∑n?d?i=1∑n?(ai??1??dai??1???d+1)≤k
=n?d?∑i=1nai+∑i=1n?ai?1d??d≤k=n*d-\sum_{i=1}^na_i+\sum_{i=1}^n\lfloor\frac{a_i-1}ze8trgl8bvbq\rfloor*d\le k=n?d?i=1∑n?ai?+i=1∑n??dai??1???d≤k
d(n+∑i=1n?ai?1d??d)≤k+∑i=1naid(n+\sum_{i=1}^n\lfloor\frac{a_i-1}ze8trgl8bvbq\rfloor*d)\le k+\sum_{i=1}^na_id(n+i=1∑n??dai??1???d)≤k+i=1∑n?ai?
?ai?1d?\lfloor\frac{a_i-1}ze8trgl8bvbq\rfloor?dai??1??有根號的取值,我們直接分塊即可
code
#include <cstdio> #include <iostream> using namespace std; #define N 105 #define int long long int n, k, Max, ans; int a[N];signed main() {scanf( "%lld %lld", &n, &k );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &a[i] ), k += a[i], Max = max( Max, a[i] - 1 );for( int l = 1, r, sum;l <= Max;l = r + 1 ) {r = Max, sum = 0;for( int i = 1;i <= n;i ++ )if( a[i] - 1 >= l ) {sum += ( a[i] - 1 ) / l;r = min( r, ( a[i] - 1 ) / ( ( a[i] - 1 ) / l ) );}if( l <= k / ( sum + n ) ) ans = max( ans, min( k / ( sum + n ), r ) );}if( Max < k / n ) ans = max( ans, k / n );printf( "%lld", ans );return 0; }總結
以上是生活随笔為你收集整理的数论分块练习([CF830 C]Bamboo Partition + [hdu 6395]Sequence )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 499 元,漫步者推出 W820NB 空
- 下一篇: CF1156D 0-1-Tree(换根D