P3951 小凯的疑惑 题解

CSDN同步

原题链接

简要题意:

给定两种互质的硬币面值,求不能用这两个硬币表示出的面值个数。

本题作为 \(\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;
}

posted @ 2020-03-30 19:11  bifanwen  阅读(127)  评论(0编辑  收藏  举报