2524. 吃蛋糕 (新) (Standard IO)

题目描述

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
 

(我感觉我自己越来越水贴了。。 

分析: 

这一道题目,我们一看便知(请允许我的冒昧

Beny 吃的量C = 吃X个体积为A的蛋糕+吃Y个体积为B的蛋糕

于是,我们就可以想到 :  C = AX+BY

于是,我们就可以推理出: C % (AX+BY) = 0

又是一道很水的Exgcd题目

 然后,就没有然后了。。

这里放一下Exgcd函数

long long exgcd(long long a, long long b, long long &x, long long &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    int d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
    return d;
}

 不开long long 回家见mama

但是 ! 还没有完! Exgcd 通常求得都不是(本来就不是

数量总数,所以 我们还需要理解一下这个东西:

因为 y 每一次减去一个a 都能得到一个解

所以,我们直接使用 y / a + 1 即可食用。

(这篇文章充满了水分,-

代码是必须要放到

#include<bits/stdc++.h>
using namespace std;
long long t,a,b,c;
long long exgcd(long long a, long long b, long long &x, long long &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    int d = exgcd(b, a % b, y, x);
    y -= (a / b) * x;
    return d;
}
long long Mod(long long x,long long y)
{
	return (x%y+y)%y;
}
int main()
{
	scanf("%lld",&t);
	while(t--)
	{
		long long x,y;
		scanf("%lld%lld%lld",&a,&b,&c);
		long long ap = exgcd(a,b,x,y);
		if (c % ap != 0)
		{
			printf("0\n");
			continue;
		}
		a/=ap;b/=ap;c/=ap;
		x=Mod((x%b)*(c%b),b);
		y=(c-a*x)/b;
		if (y<0)
		{
			printf("0\n");
		}
		else
		{
			printf("%lld\n",y/a+1);
		}
	}
	return 0;
}

总结 

(我劝你耗子尾汁,别吃那么多,小心长胖。

 终于,Beny吃了10000组蛋糕,每一组小于1e14单位蛋糕

Beny多么幸福啊,肚子都吃没了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值