题目:
小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。
输入格式
输入数据仅一行,包含两个正整数 �a 和 �b,它们之间用一个空格隔开,表示小凯手中金币的面值。
输出格式
输出文件仅一行,一个正整数 �N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
样例
Inputcopy | Outputcopy |
---|---|
3 7 | 11 |
小凯手中有面值为3和7的金币无数个,在不找零的前提下无法准确支付价值为 1、2、4、5、8、111、2、4、5、8、11的物品,其中最贵的物品价值为11。
比11贵的物品都能买到,比如:
- 12=3×4+7×012=3×4+7×0
- 13=3×2+7×113=3×2+7×1
- 14=3×0+7×214=3×0+7×2
- 15=3×5+7×015=3×5+7×0
数据范围与提示
对于 30%30% 的数据:1≤�,�≤501≤a,b≤50;
对于 60%60% 的数据: 1≤�,�≤10,0001≤a,b≤10,000;
对于 100%100% 的数据:1≤�,�≤1,000,000,0001≤a,b≤1,000,000,000。
思路:
首先对a>b的情况,交换a,b的大小,使得a<b,则答案满足ans = a * a - a - 1 + (a - 1) * (b - a - 1);
代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
long long a,b;
int main()
{
scanf("%lld%lld",&a,&b);
if (a > b)
{
long long tmp = b;
b = a;
a = tmp;
}
long long ans;
ans = a * a - a - 1 + (a - 1) * (b - a - 1);
cout <<ans;
return 0;
}