吃蛋糕 题解

吃蛋糕 题解题目 题目描述 Beny 想要用蛋糕填饱肚子 Beny 一共想吃体积为 c 的蛋糕 他发现有两种蛋糕可以吃 一种体积为 a 一种体积为 b 但两种蛋糕各有特色 Beny 想知道他一共有多少种不同吃法 使得他恰好可以填饱肚子 输入 t 第一行一个 t 接下来 t 行 每行三个正整数 a

大家好,我是讯享网,很高兴认识大家。

题目

题目描述

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

输入

输出

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

样例输入

样例输入 1 

讯享网
讯享网3 2 3 4 3 4 24 3 7 11 
样例输入 2 
讯享网4 12 13 1003 56 44 792 4616 5364    136 

样例输出

样例输出 1 
讯享网1 3 0

样例输出2 

6 2 135 3

 

思路

        题目大意我就不讲了。

        她只吃两种蛋糕,a,b,我们设x表示第一种蛋糕吃x个,第二种蛋糕吃y个,则


讯享网

ax+by=c

        这不就是扩展欧几里得马!

        但当我们兴高采烈地区写代码时,我们发现一件事情:她问的是x,y共有多少组解,而不是最小解。

        根据欧几里得定理,推出公式:方案总数=|\frac{y}{a}|+1。防负数留作思考。

        而如果c|d不成立或y<0,那么输出0。

代码

讯享网#include <cstdio> #define ll long long using namespace std; ll a,b,c,d,x,y; void exgcd(ll a,ll b) { if (b==0) d=a,x=1,y=0; else { exgcd(b,a%b); ll t=x; x=y; y=t-a/b*y; } } int main() { int T; scanf("%d",&T); while (T--) { scanf("%lld %lld %lld",&a,&b,&c); exgcd(a,b); if (c%d) { printf("0\n"); continue; } a/=d,b/=d,c/=d; x=(((x%b)*(c%b))%b+b)%b; y=(c-a*x)/b; if (y<0) printf("0\n"); else printf("%lld\n",y/a+1); } return 0; }

小讯
上一篇 2025-04-09 14:58
下一篇 2025-02-07 09:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28962.html