P3951 小凯的疑惑 题解

博客园同步

原题链接

简要题意:

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

本题作为 NOIP   2017 \texttt{NOIP 2017} 的签到题,有一定的难度。

首先,互质 是一个很重要的条件。

为什么要互质?也就是说, gcd ( x , y ) = 1 \gcd(x,y) = 1 .

众所周知:

a x + b y = k ax + by = k 无解且 k k 是最大的那个。显然:

a y 1 a \leq y-1

(这是因为, a y \lfloor \frac{a}{y} \rfloor 的部分可以当做 a × b a \times b 的整体被列入 b b 中)

此时, b 0 b \geq 0 则显然有解。所以不可以。 b < 0 b<0

此时, b b 越大则 k k 越大,所以取 a = y 1 , b = 1 a = y-1 , b=-1 .

代入得:

k = ( y 1 ) x y = x y x y k=(y-1)x - y = xy - x - y

(原来这么简单)

时间复杂度: O ( 1 ) O(1) .

实际得分: 100 p t s 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;
}

发布了27 篇原创文章 · 获赞 33 · 访问量 530

猜你喜欢

转载自blog.csdn.net/bifanwen/article/details/105261451