51 nod 1449 砝码称重

这个题,我一看!嗷!,原来是一个贪心题,很快啊,我看了看没有思路,队友A了,我大意了啊,没有闪,不然我肯定自己A。队友不讲武德,把我的51nod币用完了。希望队友耗子尾汁,好好反思,以后不要再犯这样的聪明,小聪明。

#include<bits/stdc++.h>
#define fp(i,a,b) for(int i=a;i<=b;i++)
typedef long long ll;
typedef double dl;
using namespace std;

const int maxn=2e5+7;
const ll M=1e9+7;
const int INF=0x3f3f3f3f;

ll w,m;

vector<int> ve;

void solve()
{
    scanf("%lld%lld",&w,&m);
    int flag=0;
    while(m!=0)
    {
        int k=m%w;
        //printf("k:%d\n",k);
        if(m%w!=w-1&&m%w!=1&&m%w!=0&&m%w!=w-2)
        {
            flag=1;
            break;
        }
        ve.push_back(m%w);
        m/=w;
    }
    //cout<<"flag1"<<flag<<endl;
//    for(int i=ve.size()-1;i>=0;i--)
//    {
//        cout<<ve[i];
//    }
    cout<<endl;
    if(flag==0)
    {
        if(w-1==1) ;
        else 
        {
            for(int i=0;i<ve.size()-1;i++)
            {
                if(ve[i]==w-1&&ve[i+1]==1)
                {
                    flag=1;
                    break;
                }
            }
        }
        //cout<<"flag1:"<<flag<<endl;
            if(w-2==1||w-2==0) ; 
            else if(ve[0]==w-2) flag=1;
            else if(flag==0)
            {
                for(int i=1;i<ve.size()-1;i++)
                {
                    if(ve[i]==w-2&&((ve[i-1]!=w-1&&ve[i-1]!=w-2)||(ve[i+1]!=w-1&&ve[i+1]!=w-2&&ve[i+1]!=0)))
                    flag=1;
                } 
            }
            //cout<<"flag2:"<<flag<<endl;


    }
    if(flag) printf("NO\n");
    else printf("YES\n");


}

int main()
{
    //ios::sync_with_stdio(0);
    //cin.tie(0),cout.tie(0);
    //int T; scanf("%d",&T)
    //for(int i=1;i<=T;i++)
        solve();
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务