数学+二分

连续打了3场$codeforces$,深深的被各种模拟贪心分类讨论的$C$,$D$题给恶心到了

还有永远看到题一脸懵的$B$题


首先考虑画出不同函数值迭代转移的关系,要注意考虑连边是否能成立,也就是满不满足函数的定义域

 

首先观察上图,可以发现如果$y$是偶数,节点$y$的左子树存在

但如果$y$是奇数,节点$y$的左子树不存在,因为$y+1$是偶数,不满足$f(x)=x-1$的定义域

并且右子树的所有节点都存在,因为都是奇数,如下图

那么现在统计一个定值$y$在$1-n$中经过$y$的$path$数,就是以y为根这棵树结点值小于等于n的节点数

观察可以发现,这些节点的值有规律

对于$2^{k}y$级别,树上的范围为$2^{k}y$到$2^{k}y+2^{k+1}-1$

那么可以在$log$的时间求出来

奇数的也是同理,$2^{k}y$到$2^{k}y+2^{k}-1$

但题目要求的是最大的$y$

那么可以分奇数偶数分别二分求解

 1 #include <bits/stdc++.h>
2 #define ll unsigned long long
3 #define inf (int)1e9
4 #define m_k make_pair
5 using namespace std;
6 ll n,k,z[63],ans;
7 bool check(ll mid)
8 {
9 if (mid==1)
10 return 1;
11 ll cnt=0;
12 if (mid%2==1)
13 {
14 for (int i=0;i<=62;i++)
15 {
16 if (z[i]*mid>n)
17 break;
18 if (z[i]*mid+z[i]-1<n)
19 cnt+=z[i];
20 else
21 {
22 cnt+=n-z[i]*mid+1;
23 break;
24 }
25 }
26 }
27 else
28 {
29 for (int i=0;i<=62;i++)
30 {
31 if (z[i]*mid>n)
32 break;
33 if (z[i]*mid+z[i+1]-1<n)
34 cnt+=z[i+1];
35 else
36 {
37 cnt+=n-z[i]*mid+1;
38 break;
39 }
40 }
41 }
42 if (cnt>=k)
43 return 1;
44 else
45 return 0;
46 }
47 int main()
48 {
49 scanf("%lld%lld",&n,&k);
50 if (k==n)
51 {
52 printf("1\n");
53 return 0;
54 }
55 z[0]=1;
56 for (int i=1;i<=62;i++)
57 z[i]=z[i-1]*2;
58 ll l,r;
59 l=0;r=(n-1)/2;
60 while (l<r)
61 {
62 ll mid=l+((r-l+1)>>1);
63 if (check(2*mid+1))
64 l=mid;
65 else
66 r=mid-1;
67 }
68 ans=2*l+1;
69 l=0;r=n/2;
70 while (l<r)
71 {
72 ll mid=l+((r-l+1)>>1);
73 if (check(2*mid))
74 l=mid;
75 else
76 r=mid-1;
77 }
78 ans=max(ans,2*l);
79 printf("%lld\n",ans);
80 }

CF1271E Common Number的更多相关文章

  1. Codeforces Round #608 (Div. 2) E. Common Number

    链接: https://codeforces.com/contest/1271/problem/E 题意: At first, let's define function f(x) as follow ...

  2. Codeforces Round #608 (Div. 2) E - Common Number (二分 思维 树结构)

  3. Codeforces Round #608 (Div. 2) E. Common Number (二分,构造)

    题意:对于一个数\(x\),有函数\(f(x)\),如果它是偶数,则\(x/=2\),否则\(x-=1\),不断重复这个过程,直到\(x-1\),我们记\(x\)到\(1\)的这个过程为\(path( ...

  4. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  5. [AX]AX2012 Number sequence framework :(三)再谈Number sequence

    AX2012的number sequence framework中引入了两个Scope和segment两个概念,它们的具体作用从下面序列的例子说起. 法国/中国的法律要求财务凭证的Journal nu ...

  6. Why Python is Slow

    Why Python is Slow: Looking Under the Hood https://jakevdp.github.io/blog/2014/05/09/why-python-is-s ...

  7. hadoop多文件格式输入

    版本号: CDH5.0.0 (hdfs:2.3.mapreduce:2.3,yarn:2.3) hadoop多文件格式输入,一般能够使用MultipleInputs类指定不同的输入文件路径以及输入文件 ...

  8. 一步步教你创建自己的数字货币(代币)进行ICO

    本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 ...

  9. Perl正则表达式引用

    正则表达式两篇: 基础正则 Perl正则 本文是对Perl正则的一点扩展,主要内容是使用qr//创建正则对象,以及一些其它的技巧. qr//创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以 ...

随机推荐

  1. 076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学

    076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学 本文知识点:Java面向对象导学 说明:因为时间紧张,本人 ...

  2. 搭建ipse隧道

    我没有太多的物理服务器,实验环境只能用四台装了linux的虚拟机来模拟,用户层工具是openswan.大致拓扑如下(我有点懒,公网地址我用的194.168.10.0/24,别和192.168.xx.x ...

  3. 多测师讲解自动化--rf断言(下)--_高级讲师肖sir

    1.Page Should Contain 1.1存在页面上的内容 1.2 不存在页面上的内容, 运行抛异常 1.3 Page Should Not Contain 1.4 1.5 输入页面元素,判断 ...

  4. 多测师讲解selenium _assert断言_高级讲师肖sir

    assert断言 # # 断言:最常用的断言方法if判断# assert Python语法中自带的断言from selenium import webdriverfrom time import sl ...

  5. Mybatis老手复习文档

    Mybatis学习笔记 再次学习Mybatis,日后,有时间会把这个文档更新,改的越来越好,然后,改成新手老手通用的文档 1.我的认识 Mybatis 是一个持久层框架,(之前 我虽然学了这个myba ...

  6. 【模拟】CF 796C Bank Hacking

    题目大意 洛谷链接 给定一棵带点权树,选出一个最佳的根节点,使得根节点的点权不变,它的儿子点权加1,其余点点权加2,并使最大点权最小,输出这个最小的最大点权. 其他见链接(懒). PS:原题面很不好总 ...

  7. 双栈排序(洛谷P1155)二分图的判定+思维贪心

    题目:戳这里 题目大意: 给你一个数列,问能否通过两个栈的push与pop把它输出成一个升序序列(每个数只能入队并出队一次) 不能的话输出0,能的话输出操作方法 主要思路: 1.判断是否可以成功输出升 ...

  8. docker-docker-compose 安装

    1.安装docker-compose(官网:https://github.com/docker/compose/releases) 安装: curl -L https://github.com/doc ...

  9. 第十三章 Linux三剑客之老二—sed

    一.sed #擅长增删改查 替换 选项: -n #取消默认输出 -r #支持扩展正则使用 -i #改变文件内容 -e #允许多项编辑 内部指令: p #print 打印 d    # 删除 排除 a ...

  10. OSI七层网络

    7-应用层 各种应用软件 6-表示层 转换.加密.解密压缩 5-会话层 建立会话,保证会话,终止会话 4-传输层 TCP/UDP 3-网络层 路由 2-数据链路层 交换 1-物理层