CodeForces 768 B.Code For 1(递归)

2023-05-16

Description

初始序列只有 n n 一个元素,每次操作会把序列中每个大于1的元素 x x 变成x2,x%2,x2,直至序列所有数字变成 0 0 1为止,问操作结束后序列第 l l 个元素到第r个元素之间有多少 1 1

Input

三个整数n,l,r,保证 r r 不超过序列长度(0n<250,0rl105,r,l1)

Output

输出操作结束后序列第 l l 个元素到第r个元素之间有多少 1 1

Sample Input

7 2 5

Sample Output

4

Solution

对于一个元素x,假设 2nx<2n+1 2 n ≤ x < 2 n + 1 ,那么需要 n n 次操作才能把x变成若干 0 0 1,简单计算得 x x 会变成一个长度为2n+11 01 01 序列,且其中共 x x 1(数学归纳法即可),进而可以递归解决该问题,假设当前在统计 x x 所形成的区间[L,R]的贡献(答案即求 n n 所形成的整个区间的贡献),如果该区间被查询区间包含则贡献即为x,如果该区间与查询区间不相交则贡献为 0 0 ,否则把该区间按操作要求分成左中右三块,令mid为区间中点,则左半部分为由 x2 ⌊ x 2 ⌋ 形成的区间 [L,mid1] [ L , m i d − 1 ] 的贡献,右半部分为由 x2 ⌊ x 2 ⌋ 形成的区间 [mid+1,R] [ m i d + 1 , R ] 的贡献,中间为 x%2 x % 2 对答案的贡献,递归求解即可

Code

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
ll deal(ll n)
{
    ll t=log2(n);
    return (1ll<<(t+1))-1;
}
ll Solve(ll n,ll L,ll R,ll l,ll r)
{
    if(n==0)return 0;
    if(l<=L&&R<=r)return n;
    if(r<L||l>R)return 0;
    ll mid=(L+R)/2;
    return Solve(n/2,L,mid-1,l,r)+Solve(n%2,mid,mid,l,r)+Solve(n/2,mid+1,R,l,r);
}
int main()
{
    ll n,l,r;
    while(~scanf("%I64d%I64d%I64d",&n,&l,&r))
        printf("%I64d\n",Solve(n,1,deal(n),l,r));
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeForces 768 B.Code For 1(递归) 的相关文章

  • websocket连接状态码

    最近在做websocket 需要用到这些 查资料记录下 官网 https developer mozilla org zh CN docs Web API CloseEvent CloseEvent code 只读 返回一个 unsigne
  • C. Doremy‘s IQ(二分/贪心)

    题目 题意 给定n个任务和艾米的智商q 艾米要按顺序处理这n个任务 每个任务有难度值a i 对于每个任务 艾米可以选择处理 也可以选择不处理 如果艾米当前的智商q大于等于任务a i 则艾米可以直接处理该任务 智商不受任何影响 如果艾米当前的
  • 【Struct(结构体)杂谈之六】无既是有---没有成员变量的Struct(结构体)

    没有成员变量的Struct 结构体 在开始本篇之前 想问大家一个问题 0是什么 呵呵 就是没有呗 那好 这5块钱拿去 就当抵我上次向你借的500块钱 什么 这哪和哪啊 这不一样 可是你自己说的 0就是 没有 我说不清 反正不行 你必须还我5
  • codeforces 950 #469 div2 D A Leapfrog in the Array

    Problem codeforces com contest 950 problem D Reference Codeforces Round 469 Div 2 D A Leapfrog in the Array 思维 Meaning 开
  • 1800*D. Nested Segments(数组数组&&离散化)

    解析 按照右端点进行排序 这样某个区间包含的区间只能是在其前面的区间中 所以维护左端点 x 的出现次数 这样我们在查询某个区间 x y 的时候 只需要求 x y 之间包含多少个前面区间的 x 即可 前缀和 因为 前面区间的 y 显然小于当前
  • vs2012编译boost_1_53_0

    Boost库的介绍 Boost库是一个经过千锤百炼 可移植 提供源代码的C 库 作为标准库的后备 是C 标准化进程的发动机之一 Boost库由C 标准委员会库工作组成员发起 其中有些内容有望成为下一代C 标准库内容 在C 社区中影响甚大 其
  • pytorch网络m参数量、flops计算方法

    1 from thop import profile x torch randn 1 3 256 256 flops params profile self modelG inputs x print flops is 2fM flops
  • 1200*A. You‘re Given a String...(枚举)

    include
  • Codeforces Round#808 div.1+div.2题解

    视频讲解 BV1ya411S7KF div 2 A Difference Operations 题目大意 给定长度为 n n n 的数组 a a a 可以进行任意次操作 每次操作选择一个整数
  • 1400*C. No Prime Differences(找规律&数学)

    解析 由于 1 不是质数 所以我们令每一行的数都相差 1 对于行间 分为 n m之中有存在偶数和都为奇数两种情况 如果n m存在偶数 假设m为偶数 如果都为奇数 则 include
  • Educational Codeforces Round 67 (Rated for Div. 2)

    contest链接 A Stickers and Toys time limit per test 2 seconds memory limit per test 256 megabytes input standard input out
  • Java解一元二次方程

    import java util Scanner public class Calculate public static void main String args 创建键盘录入 Scanner sc new Scanner System
  • 教妹学Java(十五):for循环详解

    你好呀 我是沉默王二 一枚颜值与才华俱在的程序员 本篇教程通过我和三妹对话的形式来谈一谈 for while do while 循环之间的差别 以及重点介绍一下 for 循环 while do while 会在接下来的教程中单独介绍 教妹学
  • 1096C - Polygon for the Angle-几何-性质

    思路 根 据 几 何 性 质 正 多 边 形 所 有 三 个 点组成的 角 都 是最小角的倍数 然后根据内角公式 可以求出 正多边形 最小角为 多边形内角 n 2 然后 打表发现 180边形最小角为1 最大角 178 所以 只有 179无法
  • 1600*B. Jumping Jack(数学&&找规律)

    解析 一直往右条 直到第一次超过 x 如果当前和目标点 p x为偶数 则 p x 2 的那一步向左跳 这样会少跳 p x 正好补在多跳的这一段 如果为奇数 则不能除2 则继续跳 直到距离为偶数即可 x和x答案一样 include
  • Codeforces#808(Div.2)A-D题解

    目录 A Difference Operations B Difference of GCDs C Doremy s IQ D Difference Array A Difference Operations Problem A Codef
  • 基于多项贝叶斯的三分类的情感分析实现

    写在前面 本实验报告是一篇很水的水课的期末大作业 代码 数据集均为原创 意在用最少的代码和最简单的数据集完成老师留下的题目 仅供交流学习使用 禁止直接洗稿嗷 目录 写在前面 一 实验目的 二 实验手段和方法 三 实验内容 四 实验总结 一
  • 第二节 分支和循环语句

    第二节 分支和循环语句 目录 一 什么是语句 二 分支语句 选择结构 三 循环语句 本章重点 分支语句 if switch 循环语句 while for do while goto语句 一 什么是语句 C语句可分为以下五类 表达式语句 函数
  • 1600*D. Road Map(数学

    解析 记录每个点的父节点和子节点 从新的根节点开始遍历 遍历所有的非父结点即可 include
  • Codeforces 1475C. Ball in Berland(二元容斥)

    题目传送门 题意 一个班级有a个男生和b个女生 现在这个班级有k对男女愿意一起出席毕业典礼 这里注意k对男女中可能会有某个男生或女生出现在多个pair中 你从这k对中找出两对 使得这两对中的男生不相同 女生不相同 即一个男生或女生不可能在一

随机推荐