[ZZOJ#31]类欧几里得

试题描述

这是一道模板题。

给出 \(a, b, c, n\),请你求出 \(\sum_{x=0}^n{\lfloor \frac{a \cdot x + b}{c} \rfloor}\)

输入

一行四个正整数 \(a, b, c, n\)。

输出

一个整数表示答案。

输入示例1

10 7 3 3

输出示例1

28

输入示例2

36976101 240442820 735275034 66441189

输出示例2

110998229606855

数据规模及约定

对于 \(50\%\) 的数据,有 \(n \le 10^7\)

对于 \(100\%\) 的数据,保证 \(a, b, c, n \le 10^9\),答案不会超过 \(9223372036854775807\)(int64 最大值)。

题解

以前出出来的,发现忘记写博客了,来补个坑。

类欧模板。讲解随便就能百度到。

主要思路就是数形结合,将此题转化成“求直线下方整点个数”。对于 \(c \ge a\) 或 \(b \ge a\) 的情况,将整数部分 \(\lfloor \frac{c}{a} \rfloor\) 和 \(\lfloor \frac{b}{a} \rfloor\) 先算出来,再考虑补上没记上的部分,于是将问题变成了 \(b, c < a\) 的情况。对于这个情况,就是求一个直角梯形内部整点个数(这个直角梯形 \(y\) 轴上结局和斜率都小于 \(1\) 的性质保证后面的子问题规模会缩小),我们考虑不按 \(x\) 坐标枚举,变成按 \(y\) 坐标枚举,推一推式子发现能转化成子问题。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
#define rep(i, s, t) for(int i = (s); i <= (t); i++)
#define dwn(i, s, t) for(int i = (s); i >= (t); i--) int read() {
int x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
} #define LL long long LL solve(LL a, LL b, LL c, LL n) {
if(!n) return b / c;
if(n < 0) return 0;
if(a >= c || b >= c) return b / c * (n + 1) + a / c * n * (n + 1) / 2 + solve(a % c, b % c, c, n);
LL m = (a * n + b) / c;
return n * m + m - solve(c, a - b + c - 1, a, m - 1);
} int main() {
int a = read(), b = read(), c = read(), n = read(); printf("%lld\n", solve(a, b, c, n)); return 0;
}

最新文章

  1. Oracle 11g 服务器安装图解
  2. 假设检验:p-value,FDR,q-value
  3. php代码加密
  4. Python基础教程【读书笔记】 - 2016/7/7
  5. 学习记录 Eclipse常用快捷键及其演练
  6. 使用zend studio配置Xdebug调试PHP教程
  7. 《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止
  8. 记录maven 整合SSM框架
  9. AMBARI Blueprint 使用文档
  10. Java中如何创建一个新的对象的/Creating Objects/
  11. git个人学习总结
  12. Makefile 中符合的使用
  13. 20165327 2017-2018-2 《Java程序设计》第7周学习总结
  14. 设置ListView显示到最后一行
  15. FineBI学习系列之FineBI的ETL处理(图文详解)
  16. 查询Oracle性能差的、正在执行或执行过的SQL语句
  17. Apache kafka v1.0.0 部署文档
  18. 【转】HttpServletRequestWrapper 实现xss注入
  19. Ubuntu中利用rename批量重命名
  20. Ubuntu-16.04-Desktop +Hadoop2.7.5+Eclipse-Neon的云计算开发环境的搭建(伪分布式方式)

热门文章

  1. PMBOK(第六版) PMP笔记——第十章(项目沟通管理)
  2. ubuntu install oracle jdk
  3. 在 Java 8 中避免 Null 检查
  4. c语言中--typeof--关键字用法
  5. MySql主从同步笔记
  6. 2019年Vue学习路线图
  7. kali下将Python2.x切换至Python3.x
  8. libevent 信号事件实现方式
  9. Reading comprehension HDU - 4990 (矩阵快速幂 or 快速幂+等比数列)
  10. Leetcode 96. 不同的二叉搜索树