数论分块练习([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⎦⎤×⎣⎡D00C10⌊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∑nd−((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∑nd−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∑nai+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∑nai
⌊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 )相关推荐
- [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≤ ...
- 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 ...
- D - Triangle Partition HDU - 6300 sort(cmp)
D - Triangle Partition HDU - 6300 题解 由于三点不共线,且三角形不相交,则对坐标排序,输出 #include<bits/stdc++.h> using n ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...
- 数学--数论--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 ...
- [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)
problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...
- 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 ...
- 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 ...
- 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里是不变的,可以数论分块,再在每一段里 ...
最新文章
- Linux下修改PATH环境变量
- zabbix 自动注册发现
- C语言经典例8-输出乘法口诀表
- 【Cson原创】javascript中length属性的探索
- 关于ST02看到SWAP红色的讨论
- python 各个模块的简单介绍 转载
- HDU 1950 Bridging signals
- 1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册
- order by 子查询_【框架】118:mybatis之多表高级查询
- 解谜元宇宙元年的十个疑问
- android numberpicker,NumberPicker实现滑动选择
- C#调用大漠插件,发送QQ和微信消息
- UNIX和类Unix操作系统
- Spring学习笔记(三十六)——SpringBoot 实现大文件分片上传、断点续传及秒传
- 共享经济已成资本傀儡,背后是腾讯和阿里的暗斗
- Win10安装net framework 3.5失败,错误代码0x8024402c
- 解决PS内存不足的错误
- 数据集成平台的特点(Oracle service bus)
- FileFilter 文件过滤器
- 动态类型+面向对象 = shit
热门文章
- IT公司老板落水,各部门员工怎么救?
- Python项目可以有多大?最多可以有多少行代码?
- 看完这13张图,不得不佩服还是外国人会玩人工智能
- 作业优先调度java代码_如何在触发它时在java代码中为hadoop作业设置优先级?
- python画图比赛_Python选修课第二届Turtle绘图大赛
- 项目管理六大制约因素_用PCTS理念做好项目管理规划(优秀项目管理者必知)...
- java 异步读写_Java异步与AIO
- 窗宽窗位改变图像_CT、MRI图像的影像诊断4大原则、5个步骤、3大阅片方法
- gif android 点击 加载,android 加载显示gif图片的解决方案
- [剑指offer]面试题1:赋值运算符函数