• CF1249C2-Good Numbers (hard version)


    题目:https://vjudge.net/problem/CodeForces-1249C2

    分析:转为三进制数后,从高位往低位找到第一个为2的位置h,再从此位置向高位找到第一个为0的位置k,将k位改为1并舍去低位的所有数,此时必然比原数大且满足要求,运用快速幂输出即可。

    #include <stdio.h>
    #include <string.h>
    typedef long long ll;
    ll a[200];
    ll quickpow(ll base,ll b){//快速幂
        ll ans=1;
        while(b){
            if(b&1)ans*=base;
            base*=base;
            b>>=1;
        }
        return ans;
    }
    int main(void){
        int t;
        scanf("%d",&t);
        while(t--){
            memset(a,0,sizeof(a));
            ll n;
            scanf("%lld",&n);
            ll r=0,n2=n;
            while(n>0){
                a[r++]=n%3;
                n/=3;
            }
            ll h=r-1;
            for(;h>=0;h--){
                if(a[h]==2)
                break;
            }
            if(h==-1)
            printf("%lld
    ",n2);
            else{
            ll k=h+1;
            for(;k<=r-1;k++){
                if(a[k]==0){
                    a[k]=1;
                    break;
                }
            }
            ll sum=0;
            if(k==r)a[r]=1;//不存在为0的位只能最高位进1
            for(ll j=k;j<=r;j++){
                if(a[j]==1)
                sum+=quickpow(3,j);
            }
            printf("%lld
    ",sum);
        }
    }
    return 0;
    } 
    终究独木难支。
  • 相关阅读:
    Mybatis初步
    Mybatis的配置文件和映射文件详解
    适配器模式
    工厂模式
    代理模式
    单例模式
    Spring MVC国际化
    SpringMVC的标签库
    SpringMVC文件上传下载和拦截器
    SpringMVC的配置文件
  • 原文地址:https://www.cnblogs.com/yanying7/p/12266298.html
Copyright © 2020-2023  润新知