首页 > 其他分享 >ICPC2022Xian E Find Maximum 题解

ICPC2022Xian E Find Maximum 题解

时间:2023-11-26 21:56:24浏览次数:41  
标签:ICPC2022Xian get int 题解 LL ret -- ans Find

Link

ICPC2022Xian E Find Maximum

Question

定义 \(f(x)\)

image.png

image.png

Solution

通过打表我们可以发现 \(f(x)\) 表示三进制表达中有效位数与数码和之和

image.png

接下来考虑如何获得最大的 \(f(x)\)

贪心的去考虑,假设答案为 \(Ans\),\((Ans)_3\) 肯定是前几位和 \((R)_3\) 的前几位一样,然后某一位是 \((R)_3\) 的某一位 -1 ,然后后面的几位都是 \(2\)

暴力枚举 \((R)_3\) -1 的那一位

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct Three{
    int t[51];
    Three(){memset(t,0,sizeof t);}
    Three(LL x) {
        memset(t,0,sizeof t);
        int L=0;
        while(x){
            t[++L]=x%3;
            x/=3;
        }
    }
    LL get_int(){
        LL ret=0;
        for(int i=50;i;i--) ret=ret*3+t[i];
        return ret;
    }
    int get_len(){
        for(int i=50;i;i--) if(t[i]) return i;
        return 0;
    }
    LL get_ans(){
        LL ret=0,L=0;
        for(int i=50;i;i--)if(t[i]){L=i;break;}
        for(int i=L;i;i--) ret+=t[i];
        return ret+L;
    }
};
inline void solve(){
    LL l,r,ans;cin>>l>>r;
    Three L(l),R(r);
    ans=max(L.get_ans(),R.get_ans());
    int R_len=R.get_len();
    Three Z;
    for(int i=R_len;i;i--) Z.t[i]=2;
    for(int i=R_len;i;i--){
        
        if(R.t[i]!=0){
            Z.t[i]=R.t[i]-1;
            if(Z.get_int()>=l){
                LL now=Z.get_ans();
                ans=max(ans,now);
            }
        }
        
        Z.t[i]=R.t[i];
    }
    cout<< ans << endl;
    return ;
}
int main(){
    // freopen("E.in","r",stdin);
    int T;cin>>T;
    while(T--) solve();
}

标签:ICPC2022Xian,get,int,题解,LL,ret,--,ans,Find
From: https://www.cnblogs.com/martian148/p/17858032.html

相关文章

  • Linux_sqlcmd或者是Cloudquery连接SQLSERVER2012的问题解决
    Linux_sqlcmd或者是Cloudquery连接SQLSERVER2012的问题解决背景最近想使用shell脚本给SQLServer数据库插入数据,但是发现了报错同时进行CLoudquery连接SQLServer数据库时也出现了异常.作为笔记记录一下问题和解决方法sqlcmd的问题现象sqlcmd的提示信息第一:安装sudo......
  • linux - find 查找文件
    1.-name在当前目录以及子目录中根据文件名进行查找find-name"apt.md"2.-iname忽略大小写进行查找find-iname"apt.md"3.-mindepth,-maxdepth设置从根目录下查找的目录层级find/-mindepth3-maxdepth5-namepasswd4.-exec对查找到的文件执行命令find-name......
  • warning: Signature not supported. Hash algorithm SHA1 not available 问题解决
    在使用RockyLinux安装服务的时候碰到此问题,记录下解决方法update-crypto-policies--setLEGACY参考资料https://www.redhat.com/en/blog/rhel-security-sha-1-package-signatures-distrusted-rhel-9......
  • 一种解决A*Pathfindings使用RichAI寻路 跌落出导航网格的方法
    A*Pathfinding是Unity中一个比较常用的寻路插件,其主要功能是绘制导航图并让物体沿着导航图向目标移动,可结合多种方法进行寻路方式的扩展。 该插件付费的Pro版拥有一个通过投影方式获得场景中所有网格(mesh),在网格(mesh)标面自动生成导航网格的功能,称为RecastGraph,同时配合用于A......
  • 【luogu题解】T378828 位运算
    位运算题目背景题目由daiyulong20120222创作(me)并由QBW1117完善以及数据。题目描述给定两个数\(x,y\),在给定一个位运算符号\(c\)。请你列出\(x,y\)进行\(c\)位运算是的算数竖式式。注:竖式这么列:显示出两个数的完整二进制,包括前导零。32个'-'。显示出......
  • T402161 run 题解
    LinkT402161runQuestion亮亮总共要跑\(n\)圈,可以分成多次,但是每次跑的圈数必须要比上一次跑的多,求跑完\(n\)圈的方案数Solution显然动态规划定义\(F[i][j]\)表示一共跑了\(i\)圈,最后一次跑了\(j\)圈的方案数,转移方程就为\[F[i][j]=\sum\limits_{k=1}^{j-1}F[i......
  • P1091 合唱队形题解(普及/提高−) 题解
    题目传送门这道题是一个很经典的动态规划。因为合唱队形的身高是从低——高——低来排的,所以就可以利用分治的思想将队形分成两个部分:低——高是最长上升子序列;高——低是最长下降子序列。这道题其实可以用二分查找来优化,可是这题n≤100,没有必要优化,需优化题详见P1020导弹拦截......
  • P3370 【模板】字符串哈希(普及−) 题解
    题目链接题目大意如题,给定\(N\)个字符串(第\(i\)个字符串长度为\(M_i\),字符串内包含数字、大小写字母,大小写敏感),请求出\(N\)个字符串中共有多少个不同的字符串。不知道大家知不知道一个字符串函数,叫\(insert\)他是\(STL\)库中的一个函数,作用是将两个字符串拼接起来,我......
  • P5867 [SEERC2018] Fishermen(暂无评定) 题解
    题意有\(n\)条鱼,\(m\)个渔夫,且这\(m\)个渔夫都在横坐标轴上,每个渔夫都有一个长度为\(l\)的鱼竿,当鱼和渔夫距离小于或等于\(l\)时,鱼能被钓到。并且渔夫\((x,0)\)与鱼\((a,b)\)的距离(假设为\(L\))满足如下公式\(|a−x|+b\)式子中\(x\)为渔夫的横坐标,\((a,b)......
  • AT_pakencamp_2020_day1_f Fibonaccyan(暂无评定) 题解
    题目链接题目大意:给定数\(P\),寻找能把\(P\)整除的最小的斐波那契数,然后输出它是斐波那契数列中的第几个,找不到输出的话就输出-1。分析:主要代码:a[i]=(a[i-1]+a[i-2])%p思路:先将\(a\)数组的第一项和第二项都初始化为1,然后判断是不是能整除\(p\)就行了Code:#incl......