51Nod-1352-集合计数
来源:互联网 发布:mysql中替换字符串 编辑:程序博客网 时间:2024/05/21 06:33
ACM模版
描述
题解
使用常规思路枚举的话一定会超时,这里需要用到扩展欧几里得算法求满足Ax + By = N + 1
的方程大于0的最小值和A、B
的最小公倍数,最后分析res
可以拆解出来多少个C
(最小公倍数)。
代码
#include <iostream>#include <cstdio>typedef long long ll;using namespace std;ll N, A, B;ll x, y;ll extgcd(ll a, ll b, ll &x, ll &y){ if (b == 0) { x = 1; y = 0; return a; } ll d = extgcd(b, a % b, x, y); ll t = x; x = y; y = t - (a / b) * y; return d;}ll solve(){ ll ans = 0; ll d = extgcd(A, B, x, y); ll C = A * B / d; // 最小公倍数 if ((1 + N) % d) // 无解 { return 0; } else { x = x * ((1 + N) / d); ll r = B / d; x = (x % r + r) % r; if (x == 0) // x最小为r { x += r; } ll res = N - (x) * A; if (res < 0) { return 0; } else { ans++; ans += res / C; // 拆解成多少份儿C } } return ans;}int main(){ int T; scanf("%d", &T); while(T--) { scanf("%lld %lld %lld", &N, &A, &B); cout << solve() << endl; } return 0;}
0 0
- 51Nod-1352-集合计数
- 51nod 1352:集合计数
- 51nod 1352 集合计数
- 51Nod 1352 集合计数
- 51 Nod 1352 集合计数
- 集合计数 51Nod
- 51nod 1352 集合计数(扩展欧几里得)
- 51NOD 1352 集合计数 拓展欧几里得
- 51nod 1352 集合计数 扩展欧几里得
- 51nod 1352 集合计数 (扩展欧几里得)
- 51nod 1352 集合计数(扩展欧几里德)
- 51NOD 1352 集合计数(扩展欧几里得)
- 51nod 算法马拉松 集合计数
- 51nod 集合计数(拓展欧几里得)
- 51Nod-1682-中位数计数
- 51Nod 1352 集合计数 extend GCD 扩展欧几里得+找点
- 51Nod-集合计数(拓展欧几里得+中国剩余定理)
- 51nod-1682 中位数计数
- 56. magento 判断 https or http
- Mybatis Sql日志打印
- 一点很有用的Web基础知识
- EasySwift/YXJLinksButton 比如注册协议,往往下面有一条横线。也是HTML种a标签的默认效果
- Pycharm 设置TextStyle
- 51Nod-1352-集合计数
- Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?
- 跳出思维怪圈,其实你并没有多少选择。
- EasySwift/YXJKxMenu 微信,qq首页右上角的菜单效果
- EasySwift/EasyDropDownMenu 类似美团,糯米,大众点评的筛选排序菜单
- android事件分发机制
- 杭电acm1719
- cbp2make用法介绍
- 网格地图背景下的三种寻路算法