[atARC111E]Simple Math 3
首先,必然要有$(a+ci)-(a+bi)+1<d$,因此$(c-b)i\le d-2$,即$i\le \lfloor\frac{d-2}{c-b}\rfloor$
此时,$[a+bi,a+ci]$中不存在$d$的倍数,当且仅当$\lfloor\frac{a+bi-1}{d}\rfloor=\lfloor\frac{c+bi}{d}\rfloor$,同时两者之差不大于2,因此可以通过求和来统计,即$n-\sum_{i=1}^{n}\lfloor\frac{a+ci}{d}\rfloor-\lfloor\frac{a+bi-1}{d}\rfloor$(其中$n=\lfloor\frac{d-2}{c-b}\rfloor$)
这两个式子是类似的,因此可以仅考虑$\sum_{i=1}^{n}\lfloor\frac{a+ci}{d}\rfloor$
将后者用1累加的形式来表示,即$\sum_{i=1}^{n}\sum_{1\le j\le \lfloor\frac{a+ci}{d}\rfloor}1$
调换枚举顺序,令$n'=\lfloor\frac{a+cn}{d}\rfloor$,因此即$\sum_{j=1}^{n'}\sum_{1\le i\le n,j\le \lfloor\frac{a+ci}{d}\rfloor}1$
考虑$j\le \lfloor\frac{a+ci}{d}\rfloor$,改为用$j$来限制$i$,即$\lceil\frac{jd-a}{c}\rceil=\lfloor\frac{jd-a+c-1}{c}\rfloor\le i\le n$
同时注意到$a<d$且$j\ge 1$,即保证了$\lfloor\frac{jd-a+c-1}{c}\rfloor\ge 1$
再将后者1的累加展开,即$\sum_{j=1}^{n'}n-\lfloor\frac{jd-a+c-1}{c}\rfloor+1=n'(n+1)-\sum_{j=1}^{n'}\lfloor\frac{(c-a-1)+jd}{c}\rfloor$
因此,即记$f(n,a,c,d)=\sum_{i=1}^{n}\max(\lfloor\frac{a+ci}{d}\rfloor,0)$,则$f(n,a,c,d)=n'(n+1)-f(n',c-a-1,d,c)$
另外,$f(n,a,c,d)$还有以下变换来规范其形式,即:
1.若$a\ge d$,$f(n,a,c,d)=f(n,a\ mod\ d,c,d)+\lfloor\frac{a}{d}\rfloor n$
2.若$a<0$,$f(n,a,c,d)=f(n,a+kd,c,d)-kn$(其中$k=\lfloor\frac{-a+d-1}{d}\rfloor$)
3.若$c\ge d$,$f(n,a,c,d)=f(n,a,c\ mod\ d,d)+\lfloor\frac{c}{d}\rfloor{n+1\choose 2}$
4.若$c=0$,$f(n,a,c,d)=0$
注意到其关于$(c,d)$的变换形式与扩展欧几里得相同,因此复杂度为$o(\log_{2}d)$


1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 int t,a,b,c,d;
5 ll n;#include<bits/stdc++.h>
6 using namespace std;
7 #define ll long long
8 int t,a,b,c,d;
9 ll n;
10 ll f(ll n,int a,int c,int d){
11 if (a>=d)return f(n,a%d,c,d)+(a/d)*n;
12 if (a<0){
13 int k=(-a+d-1)/d;
14 return f(n,a+k*d,c,d)-k*n;
15 }
16 if (c>=d)return f(n,a,c%d,d)+(n+1)*n/2*(c/d);
17 if (!c)return 0;
18 ll nn=(a+c*n)/d;
19 return nn*(n+1)-f(nn,c-a-1,d,c);
20 }
21 int main(){
22 scanf("%d",&t);
23 while (t--){
24 scanf("%d%d%d%d",&a,&b,&c,&d);
25 n=(d-2)/(c-b);
26 printf("%lld\n",n-f(n,a,c,d)+f(n,a-1,b,d));
27 }
28 }
29 ll f(ll n,int a,int c,int d){
30 if (a>=d)return f(n,a%d,c,d)+(a/d)*n;
31 if (a<0){
32 int k=(-a+d-1)/d;
33 return f(n,a+k*d,c,d)-k*n;
34 }
35 if (c>=d)return f(n,a,c%d,d)+(n+1)*n/2*(c/d);
36 if (!c)return 0;
37 ll nn=(a+c*n)/d;
38 return nn*(n+1)-f(nn,c-a-1,d,c);
39 }
40 int main(){
41 scanf("%d",&t);
42 while (t--){
43 scanf("%d%d%d%d",&a,&b,&c,&d);
44 n=(d-2)/(c-b);
45 printf("%lld\n",n-f(n,a,c,d)+f(n,a-1,b,d));
46 }
47 }
[atARC111E]Simple Math 3的更多相关文章
- hdu 1757 A Simple Math Problem (乘法矩阵)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU1757 A Simple Math Problem 矩阵快速幂
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu------(1757)A Simple Math Problem(简单矩阵快速幂)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- FZYZ-2071 A Simple Math Problem IX
P2071 -- A Simple Math Problem IX 时间限制:1000MS 内存限制:262144KB 状态:Accepted 标签: 数学问题-博弈论 ...
- A Simple Math Problem(矩阵快速幂)(寒假闭关第一题,有点曲折啊)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 1757 A Simple Math Problem (矩阵快速幂)
题目 A Simple Math Problem 解析 矩阵快速幂模板题 构造矩阵 \[\begin{bmatrix}a_0&a_1&a_2&a_3&a_4&a ...
- HDU 1757 A Simple Math Problem(矩阵)
A Simple Math Problem [题目链接]A Simple Math Problem [题目类型]矩阵快速幂 &题解: 这是一个模板题,也算是入门了吧. 推荐一个博客:点这里 跟 ...
- HDU 1757 A Simple Math Problem (矩阵乘法)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu 5974 A Simple Math Problem
A Simple Math Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
随机推荐
- TWAIN-v2.4-说明文档翻译(2)技术概览
技术概览 Technical Overview TWAIN架构(TWAIN Architecture) 数据交互的实现在TWAIN中由三类软件元素共同工作完成:应用程序(the application ...
- L1-017 到底有多二 (15 分) java解题
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String args[]){ 5 doub ...
- Python 做简单的登录系统
案例 之 登录系统原创作品1 该随笔 仅插入部分代码:全部py文件源代码请从百度网盘自行下载! 链接:https://pan.baidu.com/s/1_sTcDvs5XEGDcnpoQEIrMg 提 ...
- Coursera Deep Learning笔记 序列模型(三)Sequence models & Attention mechanism(序列模型和注意力机制)
参考 1. 基础模型(Basic Model) Sequence to sequence模型(Seq2Seq) 从机器翻译到语音识别方面都有着广泛的应用. 举例: 该机器翻译问题,可以使用" ...
- CODING 助力江苏高速信息实现组织敏捷与研发敏捷,领跑智慧交通新基建
疫情之下的高速公路管控重任 江苏高速公路信息工程有限公司(以下简称:江苏高速信息)成立于 2002 年,是江苏交通控股旗下,专业从事高速公路领域机电系统集成.智能交通软硬件研发.大数据分析运营的高新技 ...
- 【学习笔记】Vizing 定理
图染色问题的经典结论 定义 称一个边染色方案合法当且仅当每个顶点连出的所有边的颜色都互不相同,如果此时出现了 \(k\) 个颜色那么称该方案是图的一组 \(k\) 染色 一张无向图的边着色数为最小的 ...
- 常用Java API:大数类
摘要 java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1, 对应的十进制数是9223372036854775807,也就是说只要运算过程中会超过这个数,就会造成数据溢出,从而造成错 ...
- 电脑cmd命令快速查看连接过的WIFI密码信息
只是突然发现,好奇心作怪,试了一下,妈妈再也不用担心我忘记家里的wifi密码了 1.直接打开"运行"(win键+R) 2.输入CMD 确定 3.输入下面cmd命令.鼠标粘贴 for ...
- 助你上手Vue3全家桶之VueX4教程
目录 1,前言 2,State 2.1,直接使用 2.2,结合computed 3,Getter 3.1,直接使用 3.2,结合computed 4,Mutation 4.1,直接使用 4.2,结合c ...
- shell调用另一个脚本的三种方式fork/exec/source
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...