2022icpc西安站部分题解-E

这篇具有很好参考价值的文章主要介绍了2022icpc西安站部分题解-E。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

E. Find Maximum

题意:给定边界L和R,算满足的所有的的最大值,

其中满足:e. find maximum,c++,算法,图论

题解:

打表发现发现了f(x)与x的三进制有关系,即f(x)等于x三进制的每个数相加,再加上三进制数的有效位数。下图从左向右依次是x,x的三进制,f(x)。

e. find maximum,c++,算法,图论

于是便是将问题转变为在区间中找到三进制的每个数相加再加上三进制数的有效位数最大的值。

 首先分类讨论:

1.如果L的三进制长度小于R的三进制长度,那么答案可能是22...2(R的三进制长度减一个2),或者在100...0(R的三进制长度减一个0)-R之间选择最大值;

2.如果L的三进制长度等于R的三进制长度,那么答案在L-R之间选择最大值。

代码如下:文章来源地址https://www.toymoban.com/news/detail-714288.html

#pragma GCC optimize(2)
#include <iostream>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <bitset>
#include <unordered_map>
#include <set>
#define quick_cin() cin.tie(0),cout.tie(0),ios::sync_with_stdio(false)
#define endl "\n"
#define pb push_back
#define all(x) x.begin(), x.end()

using namespace std;

const int N = 200010, mod = 1000000007, INF = 1e9;
typedef long long LL;
typedef pair<int, int> PII;

int n, T;
int x;
LL l, r;
int res;

LL f(LL x)
{
    if (x == 0) return 1;
    else if (x % 3 == 0) return f(x / 3) + 1;
    else return f(x - 1) + 1;
}

vector<int> get_third(LL x)
{
    vector<int> q;
    if (x == 0) q.pb(0);
    while (x)
    {
        q.pb(x % 3);
        x /= 3;
    }
    reverse(q.begin(), q.end());
    return q;
}

void text(LL x)
{
    cout << x << " :\t";
    LL t = x;
    vector<int> S = get_third(t);
    
    for (int i : S) cout << i;
    cout << "\t" << f(x) << endl;
}

void cal(vector<int> l, vector<int> r, int pos, int sum, int limitr)
{
    if (limitr)
    {
        int ans = sum + (r.size() - pos) * 2 + r.size();
        res = max(res, ans);
        return ;
    }
    if (pos == r.size())
    {
        int ans = sum + r.size();
        res = max(res, ans);
        return ;
    }
    
    int limit = r[pos];
    cal(l, r, pos + 1, sum + limit, 0);
    if (limit - 1 >= l[pos]) cal(l, r, pos + 1, sum + limit - 1, 1);
}

void solve()
{
//    for (int i = 0; i <= 10; i ++ ) text(i);
    res = 0;
    cin >> l >> r;
    vector<int> L, R;
    L = get_third(l), R = get_third(r);
    if (L.size() < R.size())
    {
        res = (R.size() - 1) * 2 + R.size() - 1;
        
        vector<int> backup;
        backup.pb(1);
        for (int i = 1; i < R.size(); i ++ ) backup.pb(0);
//        reverse(backup.begin(), backup.end());
//        for (int i : backup) cout << i << " ";
        cal(backup, R, 0, 0, 0);
    }
    else
    {
        cal(L, R, 0, 0, 0);
    }
    cout << res << endl;
}

int main()
{
    quick_cin();
    cin >> T;
//    T = 1;
    while (T -- )
    {
        solve();
    }
    return 0;
}

到了这里,关于2022icpc西安站部分题解-E的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2022 ICPC 济南 E Identical Parity (扩欧)

    Problem - E - Codeforces ( n   %   k  )个( ⌊ n k ⌋ + 1 )和( k − n   %   k )个( ⌊ n k ⌋ )是否能组成( ⌊ n 2 ⌋ )和( n − ⌊ n 2 ⌋ )的问题 (n ~% ~k ~)个(left lfloor frac{n}{k} right rfloor +1)和(k-n~%~k)个(left lfloor frac{n}{k} right rfloor)是否能组成(left lfloor

    2024年02月10日
    浏览(56)
  • 2022ICPC,济南站(M,E,D

    初见安~好久好久没写博客了……感觉还是有必要写的。 拿去年济南的题目训练了一下,状态还不错,写一下自己写过了的题目的题解。 题意:给你n个数,交换他们的顺序使依次相加后总的 进位次数最少(十进制) ,并输出进位次数。 很显然,加法中两数相加最多进位进

    2024年02月05日
    浏览(41)
  • CF1881F Minimum Maximum Distance 题解 贪心+DFS

    You have a tree with n n n vertices, some of which are marked. A tree is a connected undirected graph without cycles. Let f i f_i f i ​ denote the maximum distance from vertex i i i to any of the marked vertices. Your task is to find the minimum value of f i f_i f i ​ among all vertices. For example, in the tree shown in the example, vertices 2 2 2 , 6 6

    2024年02月22日
    浏览(42)
  • 2022 ICPC Gran Premio de Mexico 1ra Fecha(一)

    今天大部分时间都花在了上一场沈阳站的L题上了,一个树上背包+容斥原理,看了好久才理解,就不硬敲上了,再想几天在写题解。然后今天自己写了场ICPC墨西哥站的 H. Hog Fencing 签到题,考察了基本不等式这个小知识点。 I. Isabel’s Divisions 签到题,stoi可将字符串转化为10进

    2024年02月05日
    浏览(41)
  • 【ICPC2022济南站】【树形dp】【删物品背包dp】C.DFS Order 2

    题目链接:https://codeforces.com/gym/104076/problem/C 简要题意:给定一棵n个点的有根树,对于所有的二元组 ( i , j ) (i,j) ( i , j ) 求这颗树所有可能的dfs序中有多少个dfs序满足第 i i i 个点出现在dfs序第 j j j 个位置。 赛场上假了无数次以后,我终于才理清楚了这题的dp思路。 状态定义

    2024年02月13日
    浏览(33)
  • 训练记录番外篇(2):2022 ICPC Gran Premio de Mexico 2da Fecha

    2022.10.3 之前训得ak场,个人认为很edu。 (顺便一提,可能这个训练记录番外系列的比赛都非常edu,十分建议铜银选手单挑) 题意比较晦涩难懂,但是读完发现是个toposort。 发现能够成为答案的点非常少,爆搜出所有可以成为答案的点然后直接二分即可。 小模拟题,锻炼码力

    2023年04月08日
    浏览(45)
  • 部分回溯法题解

    中 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2: 输入:n = 1 输出:[“()”] 如果是左括号直接添加 如果是右括号不能超过已经添加的

    2024年02月20日
    浏览(25)
  • NewStarCTF week2 部分题解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Word-For-You(2 Gen) 二、IncludeOne 三、UnserializeOne 四、ezAPI 五、 Yesec no drumsticks 2 六、Coldwinds\\\'s Desktop 七、qsdz\\\'s girlfriend 2 八、Affine(放射加密) 九、unusual_base 十、人类的本质 十一、EzRabin 提示

    2024年02月06日
    浏览(41)
  • Python头歌集合(部分参考题解)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里是本文要记录的大概内容: 头歌实践教学平台,是国内广泛使用的在线实践教学服务平台与创新环境,尤其为高校和企业的实践与创新能力提升作出了贡献。这个平台集成了多种工具,如实

    2024年02月04日
    浏览(37)
  • 题解动态规划:蓝桥杯2022国赛B组 题解 A题目

    在这组题(蓝桥杯C/C++ B组 国赛)里面挑了几道喜欢的题目,做了一下,笔记思路如下。( 其实是我觉得能做出的题 ) 题目图片来源于:CSDN 罚时大师月色 请问2022,拆分成10个不同的正整数有多少种不同的分法。 这道题目,拿到手上的时候,第一个想法是暴力,但是,每次

    2023年04月08日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包