【C++题解】吃蛋糕 (新)

博客介绍了如何使用扩展欧几里得算法解决一个数学问题:给定三种蛋糕体积,求出所有可能的组合使得总体积等于目标值。博主通过解析题目,阐述了算法思路,包括判断条件、数据范围缩放和求解过程,并给出了程序实现。在处理过程中注意了精度问题和边界情况,最后展示了样例输入和输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://gmoj.net/junior/#main/show/2524

题目描述

Beny 想要用蛋糕填饱肚子。Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一种体积为 a,一种体积为 b,但两种蛋糕各有特色。Beny 想知道他一共有多少种不同吃法, 使得他恰好可以填饱肚子。

输入

t第一行一个 t
接下来 t 行,每行三个正整数 a,b,c

输出

对于每个 a,b,c,输出一个整数表示有几种不同吃法

样例输入

样例输入 1
3
2 3 4
3 4 24
3 7 11
 
样例输入 2
4
12 13 1003
56 44 792
4616 5364 836482148
3836501 7035978 77151863500136
 

样例输出

样例输出 1
1
3
0
 
样例输出 2
6
2
135
3
 

数据范围限制

对于 30%的数据 t<=10,a,b,c<=100
对于 60%的数据 t<=100,a,b,c<=10^9
对于 100%的数据 t<=10000,a,b,c<=10^14

做法

题目大意:给你三个数 a,b,ca,b,ca,b,c ,要你求出 ax+by=cax+by=cax+by=c 的所有自然数解的个数。

小插曲:
本人感慨:哟!这不 exgcd 吗?几天不见,这么拉了?!
exgcd:鬼!
然后 exgcd 把我推出了 AC 的位置。。。

咳咳,回归主题。

我们首先用 exgcd 求出特殊解,然后判断 ccc 是否是 gcd(a,b)gcd(a,b)gcd(a,b) 的倍数,不是就直接输出 0 ,否则继续后面的操作。

我们让 a,b,ca,b,ca,b,c 同时除以 gcd(a,b)gcd(a,b)gcd(a,b) ,用来缩小数据范围,防止数据过大而爆掉。

之后求出 xx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值