中南林业大学 11届
题目描述:
链接:https://ac.nowcoder.com/acm/contest/910/E
来源:牛客网
现在有很多砝码,质量为w的0次方、1次方……n次方,每个砝码都只有一个。还有一个天平,可以在两端放置砝码和重物。现在要用这些砝码搭配出相等于重物的质量m,也可以把若干个砝码和重物一起放在天平的一侧,来平衡这个天平。
思路:: 由题意可想到 将m换成w进制后模拟即可!!!! ( 0次方,1次方,2次方,3次方,);
代码
*
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int mod=1e9+7;
int a[10001];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof a);
ll w,m,flag=0,cnt=0,f=0;
scanf("%lld %lld",&w,&m);
while(m)
{
a[++cnt]=m%w;
m/=w;
}
if(w==2||w==3) {printf("YES\n");continue;}
a[cnt+1]=0;a[cnt+2]=0;a[cnt+3]=0;
for(int i=1;i<=cnt;i++){
if(a[i]!=0&&a[i]!=1&&a[i]!=w-1&&a[i]!=w) {
flag=1;
break;
}
if(a[i]==(w-1)||a[i]==w) a[i+1]++;
}
if(!flag)
puts("YES");
else
puts("NO");
}
}
总结::
1.
应具有 适当的逆向思考能力 就想这题 可以直接 模拟进位操作而不必去正向模拟怎么得到的m
导致浪费很多时间,设置一直被卡死
2.
想到某个问题出现的时候 应在深入想一下 这个问题的发现是不是正确的 避免被自己错误的发现绊脚