【MX-J1-T2】『FLA - III』Ilumina 题解

题目传送门

【MX-J1-T2】『FLA - III』Ilumina

思路

硬导题。

因为 \(c=\lfloor \frac{b}{m}\rfloor\),那么 \(b\) 一定可以表示为 \(c\times m+x\),其中 \(0\le x\le m-1\)

又因为 \(b=\lfloor \frac{a}{n}\rfloor\),那么 \(a\) 一定可以表示为 \(b\times n+y\),其中 \(0\le y\le n-1\)

由上可以得出:

\[b=cm+x \]

\[a=bn+y \]

所以:

\[b=\frac{a-y}{n} \]

所以:

\[\frac{a-y}{n}=cm+x \]

\[\therefore a=cmn+nx+y \]

由于 \(a,c,m,n,x,y\in N\)\(m\)\(n\) 不为 \(0\),所以 \(a\ge c\)

考虑分类讨论:

  • \(a<c\) 时:因为若有解,那么 \(a\) 一定不小于 \(c\),所以此时无解。

  • \(a=c\) 时:很容易可以得出当 \(m=n=1\) 时,一定满足 \(a=b=c\),所以一个合法 \(b\) 的值就等于 \(a\)\(c\)

  • \(a>c\) 时:重新考虑上述方程,即 \(a=cmn+nx+y\):因为 \(x\le m-1,y\le n-1\),所以 \(nx+y\le n(m-1)+n-1\),所以 \(nx+y\le mn-1\),所以再设 \(z=nx+y\),所以 \(0\le z\le mn-1\),代入方程,可得: \(a=cmn+z\),再令 \(mn=f\),所以 \(a=cf+z\),其中 \(0\le z\le f-1\)。此时我们只需要考虑 \(f\) 存不存在正整数解即可。

(判断 \(f\) 有没有正整数解很简单,用贪心的思想,我们可以要求 \(f\) 尽可能大,也就是让 \(f=\lfloor\frac{a}{c}\rfloor\),然后判断 \(a-cf\)\(f\) 的大小即可,具体见代码。)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int t;cin>>t;
	while(t--){
		int a,c;cin>>a>>c;
		if(a==c)cout<<a<<endl;
		else if(a<c)cout<<-1<<endl;
		else{
			int f=a/c;int u=a-c*f;
			if(u>=f)cout<<-1<<endl;
			else cout<<c<<endl;
		}
	}
	return 0;
}
posted @ 2024-07-14 20:25  SnapYust  阅读(35)  评论(0)    收藏  举报