中南林业大学 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.
想到某个问题出现的时候 应在深入想一下 这个问题的发现是不是正确的 避免被自己错误的发现绊脚