题意:给定函数f(x),x为偶数时f(x)=x/2,x为奇数时f(x)=x-1

给定n,k,对1到n每个数求f(x)的轨迹,如path[15]={15,14,7,6,3,2,1},求在所有轨迹里出现次数大于等于k的最大值ans。
思路:我们将n个数的结构画出来,就会发现这n个数组成一个树结构。把所有的数字出现的次数找出来,就会发现一个规律,由小到大,分奇偶呈现递减趋势。
例如n=14,第1 3 5 7 9 11 13的次数分别为14 6 3 2 1 1 1。第2 4 6 8 10 12 14的次数分别为13 6 3 2 2 2。那么我们就可以分别对奇偶二分,寻找最优答案。接下来最主要的就是怎么计算每个数字的次数了。
如图所示(图片摘自参考博客):

对于2这个点来说,出现次数=(3-2+1)+(7-4+1)+(15-8+1)+(31-16+1)。
对于5这个点来说,出现次数=(5-5+1)+(11-10+1)+(23-20+1)。
每一层的最右边点和最左边点分别呈现 上一层最右边数字2以及上一层最左边数字2+1的规律。然后配合二分,就可以了。
代码如下:

#include<bits/stdc++.h>
#define ll long long
#define inf 1e18
using namespace std;ll n,k;
inline ll check(ll x)
{queue<pair<ll,ll> >p;if(x&1) p.push(make_pair(x,x));else p.push(make_pair(x,x+1));ll ans=0;while(p.size()){pair<ll,ll> zz=p.front();p.pop();ans+=min(zz.second,n)-zz.first+1;if((zz.first<<1)<=n) p.push(make_pair(zz.first<<1,zz.second<<1|1));}return ans;
}
int main()
{scanf("%lld%lld",&n,&k);ll l=1ll,r=(n%2)?n:n-1;ll ans=0;while(l<=r){ll mid=l+r>>1ll;if((mid%2ll==0)) mid--;ll cnt=check(mid);if(cnt>=k) {ans=max(ans,mid);l=mid+2ll;}else r=mid-2ll;}l=2ll,r=(n%2)?n-1:n;while(l<=r){ll mid=l+r>>1ll;if(mid%2ll==1) mid--;ll cnt=check(mid);if(cnt>=k){ans=max(ans,mid);l=mid+2ll;}else r=mid-2ll;}cout<<ans<<endl;
}

努力加油a啊,(o)/~

Common Number(奇偶二分+找规律)相关推荐

  1. HDU 6304 Chiaki Sequence Revisited(二分+找规律)

    题目链接 Chiaki Sequence Revisited Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ...

  2. 【每日一题Day35】LC878第N个神奇数字 | 二分查找 找规律 + 数学

    第N个神奇数字[LC878] 一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字.因为答案可能很大,所以返回答案 对 109 + 7 ...

  3. D. Pythagorean Triples(1487D)(打表找规律 + 二分)

    D. Pythagorean Triples(1487D)(打表找规律 + 二分) 题目来源:D. Pythagorean Triples 题意: 给定一个 n,求满足以下条件的数对 (a, b, c ...

  4. 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八

    题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...

  5. LeetCode-878. 第 N 个神奇数字【数学,二分查找,找规律】

    LeetCode-878. 第 N 个神奇数字[数学,二分查找,找规律] 题目描述: 解题思路一:二分答案+容斥原理.给定一个上下界,然后依次增大下界或者减小上界,直到只剩一个答案.容斥原理是,加上两 ...

  6. paulzhou的数学?TAT? 【二分打表找规律】

    paulzhou的数学?TAT? Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Tota ...

  7. Odd Grasshopper 奇偶找规律

    思路 : 首先根据输入的奇偶性分别找规律,发现与输入无关,都满足4个一循环的规律 如果次数n刚好是4的倍数,那么就是x0,否则,找到小于n中最靠近n的一个4的倍数,从它开始模拟到n,就是答案 #inc ...

  8. 【HDU - 1564 】Play a game (博弈问题,找规律,奇偶博弈)

    题干: New Year is Coming!  ailyanlu is very happy today! and he is playing a chessboard game with 8600 ...

  9. hdu 4279 Number (找规律)

    http://acm.hdu.edu.cn/showproblem.php?pid=4279 题意: 给出a,b两个数,1<=a<=b 如果a,b不互质,且a%b != 0则说明a是b的特 ...

最新文章

  1. mysql 0x80004005 unable to connect to any of the specified mysql hosts
  2. drugbank下载XML文件解析
  3. iOS App跳转权限设置
  4. PGM中的有向分离(d-separation)和 active trail
  5. JS解析格式化Json插件,Json和XML互相转换插件
  6. Python 第三方模块之 MySQL数据库连接模块 PyMySQL
  7. Python获得某个范围的的随机整数
  8. Node.js 应用故障排查手册 —— 大纲与常规问题指标简介
  9. C++20 系列(一)- Hello C++20
  10. 使用async读取异步数据
  11. 【Siddhi】Siddhi 4.2.40版本之前的一个Bug
  12. iOS 四种延时的方法
  13. vue H5 唤醒app
  14. 【人工智能系列 - 智能硬件 - 02】演化硬件的研究现状及发展趋势
  15. 微信文章图片防盗链,下载到本地
  16. linux文件编程 --- fflush函数
  17. UVA 1449 Dominating Patterns(AC自动机)
  18. echarts城市地图加标注
  19. html3d电子相册,3d电子相册制作软件
  20. 爆款!如何利用知乎引上万流量,我是这样做的!|实战

热门文章

  1. matlab远程桌面访问:License Manager Error - 103
  2. vulfocus靶场安装教程
  3. windowbuilder怎么加背景图_小红书引流:爆款笔记封面图怎么做?(内附教程)...
  4. keil单片机C语言输入函数,keil编写C程序是不是不能在函数内定义变量啊,求大神...
  5. Android开发之高仿三方授权登录的实现方案类似微信登录QQ登录微博登录人人网登录
  6. 通过ADB命令获取Android手机的分辨率(升级版)
  7. ftp连接中服务器位置,使用 FTP 连接到服务器
  8. cultureinfo 类 java_System.Globalization.CultureInfo.cs(示例代码)
  9. Selector 概念
  10. c语言中的数组覆盖,[求助] 怎么得到被覆盖的数组?