CF552C的题解

(一)

相当于问你能否将 \(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;
}
posted @   Jerry_heng  阅读(12)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示