文章目录

  • 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

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define ll long long
#define mod 1000000007
struct Matrix {ll c[5][5];void init() {memset( c, 0, sizeof( c ) );}Matrix operator * ( const Matrix &a ) {Matrix ans;ans.init();for( int i = 1;i <= 3;i ++ )for( int j = 1;j <= 3;j ++ )for( int k = 1; k <= 3;k ++ )ans.c[i][j] = ( ans.c[i][j] + c[i][k] * a.c[k][j] ) % mod;return ans;}
}V;
ll T, A, B, C, D, P, n;
ll ans1, ans2;Matrix qkpow( Matrix a, int b ) {Matrix ans;ans.init();for( int i = 1;i <= 3;i ++ ) ans.c[i][i] = 1;while( b ) {if( b & 1 ) ans = ans * a;a = a * a;b >>= 1;}return ans;
}signed main() {scanf( "%lld", &T );while( T -- ) {scanf( "%lld %lld %lld %lld %lld %lld", &A, &B, &C, &D, &P, &n );if( n == 1 ) { printf( "%lld\n", A ); continue; }if( n == 2 ) { printf( "%lld\n", B ); continue; }ans1 = B, ans2 = A;for( int l = 3, r;l <= n;l = r + 1 ) {if( P / l == 0 ) {V.init();V.c[1][1] = D, V.c[1][2] = C;V.c[2][1] = V.c[3][3] = 1;V = qkpow( V, n - l + 1 );ans1 = ( V.c[1][1] * ans1 % mod + V.c[1][2] * ans2 % mod + V.c[1][3] ) % mod;ans2 = ( V.c[2][1] * ans1 % mod + V.c[2][2] * ans2 % mod + V.c[2][3] ) % mod;break;}r = min( n, P / ( P / l ) );V.init();V.c[1][1] = D, V.c[1][2] = C, V.c[1][3] = P / l;V.c[2][1] = V.c[3][3] = 1;V = qkpow( V, r - l + 1 );ll newans1 = ( V.c[1][1] * ans1 % mod + V.c[1][2] * ans2 % mod + V.c[1][3] ) % mod;ll newans2 = ( V.c[2][1] * ans1 % mod + V.c[2][2] * ans2 % mod + V.c[2][3] ) % mod;ans1 = newans1, ans2 = newans2;}printf( "%lld\n", ans1 );} return 0;
}

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}{d}\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}{d}\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}{d}\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}{d}\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 )相关推荐

  1. [CodeForces1603D] Artistic Partition(四边形不等式 + 决策单调性优化dp + 分治 + 线性筛 + 数论分块)

    problem codeforces 对于给定的正整数 l≤l\leql≤,定义 c(l,r)c(l,r)c(l,r) 为满足下列条件的正整数对 (i,j)(i,j)(i,j) 的数量: l≤i≤j≤ ...

  2. HDU 6833 莫比乌斯反演 + 数论分块

    给定下列式子: ∑a1=1n∑a2=1n...∑ax=1n(∏j=1xajk)f(gcd⁡(a1,a2...,ax))⋅gcd⁡(a1,a2...,ax)\sum_{a_1=1}^n\sum_{a_2 ...

  3. D - Triangle Partition HDU - 6300 sort(cmp)

    D - Triangle Partition HDU - 6300 题解 由于三点不共线,且三角形不相交,则对坐标排序,输出 #include<bits/stdc++.h> using n ...

  4. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...

  5. 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂

    Your job is simple, for each task, you should output Fn module 109+7. Input The first line has only ...

  6. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  7. P3327 约数的个数和 [约数函数性质,数论分块]

    P3327 约数的个数和 题意 d(x)d(x)d(x)为约数的个数,对于每个询问,回答∑i=1n∑j=1md(ij)\sum_{i=1}^n\sum_{j=1}^md(ij)∑i=1n​∑j=1m​ ...

  8. P2522 HAOI2011 Problem b [莫比乌斯反演,数论分块]

    P2522 HAOI2011 题意 对于给出的n个询问,每次求有多少个数对(x,y)(x,y)(x,y),满足a≤x≤ba≤x≤ba≤x≤b,c≤y≤dc≤y≤dc≤y≤d,且gcd(x,y)=kgc ...

  9. HDU6395 Sequence(矩阵快速幂+数论分块)

    题意: F(1)=A,F(2)=B,F(n)=C*F(n-2)+D*F(n-1)+P/n 给定ABCDPn,求F(n) mod 1e9+7 思路: P/n在一段n里是不变的,可以数论分块,再在每一段里 ...

最新文章

  1. Linux下修改PATH环境变量
  2. zabbix 自动注册发现
  3. C语言经典例8-输出乘法口诀表
  4. 【Cson原创】javascript中length属性的探索
  5. 关于ST02看到SWAP红色的讨论
  6. python 各个模块的简单介绍 转载
  7. HDU 1950 Bridging signals
  8. 1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册
  9. order by 子查询_【框架】118:mybatis之多表高级查询
  10. 解谜元宇宙元年的十个疑问
  11. android numberpicker,NumberPicker实现滑动选择
  12. C#调用大漠插件,发送QQ和微信消息
  13. UNIX和类Unix操作系统
  14. Spring学习笔记(三十六)——SpringBoot 实现大文件分片上传、断点续传及秒传
  15. 共享经济已成资本傀儡,背后是腾讯和阿里的暗斗
  16. Win10安装net framework 3.5失败,错误代码0x8024402c
  17. 解决PS内存不足的错误
  18. 数据集成平台的特点(Oracle service bus)
  19. FileFilter 文件过滤器
  20. 动态类型+面向对象 = shit

热门文章

  1. IT公司老板落水,各部门员工怎么救?
  2. Python项目可以有多大?最多可以有多少行代码?
  3. 看完这13张图,不得不佩服还是外国人会玩人工智能
  4. 作业优先调度java代码_如何在触发它时在java代码中为hadoop作业设置优先级?
  5. python画图比赛_Python选修课第二届Turtle绘图大赛
  6. 项目管理六大制约因素_用PCTS理念做好项目管理规划(优秀项目管理者必知)...
  7. java 异步读写_Java异步与AIO
  8. 窗宽窗位改变图像_CT、MRI图像的影像诊断4大原则、5个步骤、3大阅片方法
  9. gif android 点击 加载,android 加载显示gif图片的解决方案
  10. [剑指offer]面试题1:赋值运算符函数