试题链接:https://www.nowcoder.com/acm/contest/151/C

定义lowbit(x) =x&(-x),即2^(p-1) (其中p为x的二进制表示中,从右向左数第一个1的位置),例如lowbit(10)=2,lowbit(3)=1。

定义函数f(l, r)为(其中0 <= l, r <= n):
输入n,求f(l, r)的最大值。

输入描述:

n以二进制形式给出,一行一个二进制01串n,表示l,r的上界。
1 <= 字符串n的长度 <= 20,000
数据保证没有前缀0。

输出描述:

一行一个整数表示答案。
示例1

输入

11

输出

2

说明

二进制串“11”对应的十进制数为“3”

解题思路:
对于公式f(l,r)而言,不断改变r的大小至l>=r,符合公式中条件(2)(3)每算一次会加1,则f(l,r)函数对应的值即为递归调用(2)(3)的次数。 首先,暴力打表将上限n跑到100

发现对于每个n而言,要使f(l,r)最大,l永远为1.

则此时otherwise的条件为  r-lowbit(r)<l<r ,由lowbit(r)的性质,r-lowbit(r)肯定为非负数。则取最大值时,r-lowbit(r)==0

此时再打表,观察发现r-lowbit(r)==0时,要是函数值最大,r 取到 1 2 4 8 16 32...这样2的整数次幂的数

此时便能得知该函数递归方式。对于一个二进制串,每次从右往左找到一个'1',将他置为'0'(条件2)至只有首位为'1'。

接着,将首位'1'置为'0',下一位的后几位全部置为'1'(条件3)

举例:1011101->1011100->1011000->1010000->1000000->111111->...

直至,二进制串变为'0'

由于当进行到类似1000...(条件3)二进制形式下这样的数时,后续都是相同操作,递归次数为 x*(x-1)/2

则,欲使f(l,r)最大,只要找到最接近上限n且'1'最多的二进制串

举例:101111 本身'1'就最多了   110001 当从左往右,第2个'1'置为0,后续置为'1'时,'1'最多,即 101111

具体实现看代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
typedef long long ll;
char s[];
int main()
{
while(cin>>s)
{
int len=strlen(s);
if(len==)
{
puts("");continue;
}
int ans1=,ans2=;
for(int i=;i<len;i++)
{
if(s[i]=='') ans1++;
}
if(ans1>)
{
for(int i=;i<len;i++)
{
if(s[i]=='')
{
ans2=len-(i+); break;
}
}
}
cout<<max(ans1,ans2)+len*(len-)/<<endl; //本身的'1'的个数,和第2位'1'变'0',后续置'1'的串的'1'的个数比较
} return ;
}

美团2018年CodeM大赛-初赛B轮 C题低位值的更多相关文章

  1. 美团2018年CodeM大赛-初赛B轮 B 配送(最短路)

    美团2018年CodeM大赛-初赛B轮 B 配送 题意 题解 对于每个任务,只要从上个任务的终点出发即可. 时间.地点很少,可以算出每个地点-时间的最小花费. 以题目描述的起点终点起始结束时间建图,很 ...

  2. 美团2017年CodeM大赛-初赛B轮-黑白树

    https://ac.nowcoder.com/acm/problem/13249 链接:https://ac.nowcoder.com/acm/problem/13249来源:牛客网 题目描述 一棵 ...

  3. 美团2017年CodeM大赛-初赛B轮 黑白树 (树形dp)

    大意: 给定树, 初始每个点全为白色, 点$i$有权值$k_i$, 表示选择$i$后, 所有距离$i$小于$k_i$的祖先(包括i)会变为黑色, 求最少选多少个点能使所有点变为黑色. 链上情况的话, ...

  4. 美团2017年CodeM大赛-初赛A轮 C合并回文子串

    区间dp一直写的是递归版本的, 竟然超时了, 学了一下非递归的写法. #include <iostream> #include <sstream> #include <a ...

  5. 2018美团CodeM编程大赛初赛B轮 A题开关灯

    题目描述 美团的办公室一共有n层,每层有m个会议室,可以看成是一个n*m的网格图.工程师们每天的工作需要协作的地方很多,经常要到会议室开会解决各种问题.公司是提倡勤俭节约的,因此每次会议室只在使用时才 ...

  6. codeM美团编程大赛初赛B轮D题

    [编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...

  7. codeM美团编程大赛初赛B轮E题

    题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101.现在对于给定的n和字 ...

  8. codeM美团编程大赛初赛B轮D题(考验你的数学思维!)

    [编程题] 模 时间限制:1秒空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c.输入描述:第一行一个整数T(T < ...

  9. 美团2018年CodeM大赛-资格赛 分数 暴力模拟

    链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...

随机推荐

  1. windows下wmic命令

    转载 https://www.cnblogs.com/archoncap/p/5400769.html 第一次执行WMIC命令时,Windows首先要安装WMIC,然后显示出WMIC的命令行提示符.在 ...

  2. C++ 日志生成 DLL

    示例: #define log_dbg(format,args...) \        printf("[DBG] [%s: %s() line:%d]: "format ,__ ...

  3. jquery 返回浏览器顶部

    经常在网页中看到有这样的现象,点击一个按钮,然后页面会跳到页面的中指定的位置,那这种效果是怎么实现的呢? 很多网页都有这种效果:返回顶部或者跳到不同的楼层(以下是天猫的效果) 实现原理: 1.我们来看 ...

  4. 27.Hibernate-缓存和懒加载.md

    目录 1.一级缓存 2.缓存的有效性 3.list和iterator缓存的区别 4.懒加载 4.1get 4.2load 1.一级缓存 Hibernate中一级缓存是Session缓存,有效范围在Se ...

  5. jquery 找同胞系列siblings() ,next() ,nextAll(), nextUntil(), prev(), prevAll(), prevUntil()

    注:expr是指可选的参数,包含用于匹配元素的选择器表达式. .siblings(expr) ---查找所有兄弟(包括哥哥和弟弟) .next(expr) ---查找紧挨着的弟弟 .nextAll(e ...

  6. linux百万并发之 tcp_mem

    百万并发之 tcp_mem   在服务端,连接达到一定数量,诸如50W时,有些隐藏很深的问题,就不断的抛出来. 通过查看dmesg命令查看,发现大量TCP: too many of orphaned ...

  7. Cocos2dx开发之屏幕适配

    由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题.为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 — 开发者不需要考虑 ...

  8. HDU6446 Tree and Permutation(树上DP)

    传送门:点我 Tree and Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (J ...

  9. Django的rest_framework的权限组件和频率组件源码分析

    前言: Django的rest_framework一共有三大组件,分别为认证组件:perform_authentication,权限组件:check_permissions,频率组件:check_th ...

  10. [leetcode]170. Two Sum III - Data structure design两数之和III - 数据结构设计

    Design and implement a TwoSum class. It should support the following operations: add and find. add - ...