洛谷P3951 [NOIP 2017 提高组] 小凯的疑惑
P3951 [NOIP 2017 提高组] 小凯的疑惑
题目背景
NOIP2017 提高组 D1T1
题目描述
小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?
注意:输入数据保证存在小凯无法准确支付的商品。
输入格式
两个正整数 \(a\) 和 \(b\),它们之间用一个空格隔开,表示小凯中金币的面值。
输出格式
一个正整数 \(N\),表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
输入输出样例 #1
输入 #1
3 7
输出 #1
11
说明/提示
【输入输出样例 1 说明】
小凯手中有面值为 \(3\) 和 \(7\) 的金币无数个,在不找零的前提下无法准确支付价值为 \(1,2,4,5,8,11\) 的物品,其中最贵的物品价值为 \(11\),比 \(11\) 贵的物品都能买到,比如:
\(12 = 3 \times 4 + 7 \times 0\);
\(13 = 3 \times 2 + 7 \times 1\);
\(14 = 3 \times 0 + 7 \times 2\);
$15 = 3 \times 5 + 7 \times 0 $。
【数据范围与约定】
对于 \(30\%\) 的数据: $1 \le a,b \le 50 $。
对于 \(60\%\) 的数据: $1 \le a,b \le 10^4 $。
对于$ 100%$ 的数据:$1 \le a,b \le 10^9 $。
思路解析
不妨设\(a < b\)
假设答案为x
若
\(x ≡ m a (mod b)\)
则
\(x = m a + n b\)
讨论n:
如果\(n ≥ 0\),那么x就不是答案,舍去
所以\(n < 0\)
讨论m:
如果\(m < 0\),那么不符合\(ma > 0\),舍去
如果\(m = 0\),那么\(x = n b\)就不是答案,舍去
所以\(m > 0\)
如果\(m = b\),那么x不是答案,舍去
如果\(m > b\),设\(m = b + s\),那么\(m a = (b + s) a = b a + s a\)不满足\(m a < b\),舍去
所以\(m < b\)
又\(m,n ∈ Z\)
所以
\(m ∈ [1,b-1]\)
\(n ≤ -1\)
所以\(x = m a + n b\)
\(≤ (b-1) a + (-1) b\)
\(= a b - a - b\)
就是答案
还有,记住了小凯,小卖部是可以找钱的......
ACcode
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1;
ll a,b;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>a>>b;
cout<<a*b-a-b<<endl;
return 0;
}
//Author:AAA_jiancaipifa

浙公网安备 33010602011771号