P3951 小凯的疑惑 题解
简要题意:
给定两种互质的硬币面值,求不能用这两个硬币表示出的面值个数。
本题作为 \(\texttt{NOIP 2017}\) 的签到题,有一定的难度。
首先,互质 是一个很重要的条件。
为什么要互质?也就是说,\(\gcd(x,y) = 1\).
众所周知:
\(ax + by = k\) 无解且 \(k\) 是最大的那个。显然:
\[a \leq y-1
\]
(这是因为,\(\lfloor \frac{a}{y} \rfloor\) 的部分可以当做 \(a \times b\) 的整体被列入 \(b\) 中)
此时,\(b \geq 0\) 则显然有解。所以不可以。\(b<0\)
此时,\(b\) 越大则 \(k\) 越大,所以取 \(a = y-1 , b=-1\).
代入得:
\[k=(y-1)x - y = xy - x - y
\]
(原来这么简单)
时间复杂度:\(O(1)\).
实际得分:\(100pts\).
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
int x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
int main(){
int n=read(),m=read();
printf("%lld\n",1ll*n*m-n-m);
return 0;
}
简易的代码胜过复杂的说教。