《学霸题》
  • 板块灌水区
  • 楼主ReqCxmChtChr
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/4/10 14:32
  • 上次更新2023/10/28 04:05:07
查看原帖
《学霸题》
421451
ReqCxmChtChr楼主2022/4/10 14:32

问一个数(小于等于10e18,不管了,要log N才可以)

可否表示成这样:

3^(a1)+3^(a2)+3^(a3)+……+3^(an)

a各不相同,大于等于0的整数

(像2就不行,2=3^0+3^0,重复了)

以下,鄙人代码,可能有问题:

#include<bits/stdc++.h>
using namespace std;
map<long long,short>ma;
bool dfs(long long now){
    if(now==0){
        return 1;
    }
    if(ma[now]!=0){
        return ma[now]==1;
    }
    if(now%3==1){
        now--;
    }
    if(now%3!=0){
        ma[now]=-1;
        return false;
    }
    ma[now]=dfs(now/3);
    return ma[now]==1;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        long long n;
        cin>>n;
        if(n%3==1){
            n--;
        }
        if(n%3!=0){
            ma[n]=-1;
            printf("NO\n");
        }
        if(dfs(n)==1){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
    //system("pause");
}

t<=1000,n<=1e18

2022/4/10 14:32
加载中...