CF552C的題解

Jerry_heng發表於2024-03-28

(一)

相當於問你能否將 \(m\) 拆成奇特的 \(n\) 進位制是每一位是 \(1\)\(0\)\(-1\)

然後就用這題的方法拆分。

  1. 先對 \(n\) 取餘。

    • 如果餘 \(0\),直接繼續。

    • 如果餘 \(1\)\(m=m-1\)

    • 如果餘 \(-1\)\(m=m+1\)

    • 否則,輸出 NO。

  2. 換下一位:\(m=m\div n\)

(二)

AC 程式碼。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
signed main(){
	scanf("%lld%lld",&n,&m);
	if(n==2){
		puts("YES");
		return 0;
	}
	while(m>0){
		int p=m%n;
		if(p==1){
			m--;
		}
		else if(p==n-1){
			m++;
		}
		else if(p!=0){
			puts("NO");
			return 0;
		}
		m/=n;
	}
	puts("YES");
	return 0;
}