51nod 1449 砝碼稱重
阿新 • • 發佈:2018-12-31
給培訓找貪心題的時候看到的,一道和貪心沒任何關係的小水題。
首先如果有解,那麼有:
容易發現若 ,那麼將等式兩邊除以 後,左式必然(因為有解)將剩餘一個 ,將其移至右邊將使得 或 (當 時顯然只會有一個滿足,而 時必然有解)。我們繼續如法炮製最終便會將等式兩邊都變成 。容易通過將這個過程反向得出 的解(當然題目沒有要求)。
故我們直接按上述過程計算,若某時 ,則無解。總時間複雜度 。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
typedef unsigned long long ull;
typedef long long ll;
//--Container--
//
void cl(){
int w,n;bool fg=1;scanf("%d %d",&w,&n);
if(w<=2){printf("YES\n");return;};
for(;;){
for(;!(n%w);n/=w);
if(n==1)break;
if(!((n+1)%w))++n;
else if(!((n-1)%w))--n;
else{
fg=0;break;
}
}
printf("%s\n",fg?"YES":"NO");
};
int main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
cl();
return 0;
};