//题意:输入w,m。
表示给你一个w,你可以使用w^0,w^1,w^2w^3.........w^100;这一百零一个数,现在又给你一个数m,让你将m放到天平的右边,现在问你能否通过在两边天平上添加那101个砝码使得天平平衡。
求M=W(a)+W(b)+...+W(c)-W(d)-W(e)-....-W(f)其中W(a)为w的a次方且括号内的数不相同。
解题思路:将等式两边同时除以W若M%W!=0既考虑存在W(0)即考虑(M+1)%W和(M-1)%W若均不存在则无解否侧循环除以W当最终W为0时即有解否则无解
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#include<algorithm>
#include<cstring>
#define max(a,b)(a>b?a:b)
#define min(a,b)(a<b?a:b)
#define INF 999999999
using namespace std;
typedef long long ll;
int main()
{
ll w,m;
while(scanf("%lld%lld",&w,&m)!=EOF)
{
while((m+1)%w==0 || (m-1)%w==0 || m%w==0)
{
if((m-1)%w==0)
m=(m-1)/w;
else if((m+1)%w==0)
m=(m+1)/w;
else if(m%w==0)
m=m/w;
if(m==0)
break;
}
if(m==0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}