CF1245F: Daniel and Spring Cleaning

CF1245F: Daniel and Spring Cleaning

题意描述:

  • 给定区间\([L,R]\),其中 \((0\leq L,R\leq 10^9)\),问在区间内有多少数对\((x,y)\)满足\(x+y==x\land y\)。

输入描述:

  • 第一行输入一个\(T\)表示测试样例数目。
  • 接下来每一个测试样例输入两个整数\(L,R\)表示区间。

输出描述:

  • 输出一个整数表示答案。

思路:

  • 首先对条件进行变形。
  • \(x+y==x\land y\),有\(x\&y==0\),证明略。
  • 那么题目要求的就转化为区间内\(x\&y==0\)的数对数量。
  • 定义\(f(l,r)\)为\([l,r)\)区间内满足条件的数对的数量。那么显然有\(f(0,r)=2r+f(1,r)\),因为\(0\)可以和任意数字组合。
  • 性质:\(f(2l,2r)=3f(l,r)\)。
    • 证明:
    • 考虑满足条件的数对\((x,y)\)的二进制表示。对于最右边的位置,有三种选择方式\((0,1),(1,0),(0,0)\)。
    • 选择其他位的方法是\(f(l,r)\),因此\(f(2l,2r)=3f(l,r)\)。
  • 这样我们可以每次对范围除以\(2\),但这样就要保证我们的\(l,r\)是偶数,当他不是偶数的时候可以进行如下操作。
  • 定义\(g(x,n)\)为满足以下条件的\(y\)的个数。
    • \(0\leq y<n\)
    • \(x\&y==0\)
  • 那么当\(l\)是奇数的时候:
    • \(f(l+1,r)=f(l,r)-2(g(l,r)-g(l,l))\)。

      • 解释:由最上方定义的那个性质可以知道:\(f(l,r)=num+f(l+1,r)\),其中\(num\)是\(l\)与\([l,r]\)区间内的数满足条件的数对\((l,x)\)数量\((x\in[l,r])\)。
      • 那么由\(g(i,j)\)的定义可知,\(g(l,r)\)表示\(l\)在\([0,r]\)范围内满足条件的\(y\)的个数,\(g(l,l)\)表示在\([0,l)\)范围内满足条件的\(y\)的个数,那么两个相减就是\([l,r)\)区间内满足条件数对的数量。当然要\(*2\),因为\((x,y)\)与\((y,x)\)为两种情况。
    • 变形为\(f(l,r)=f(l+1,r)+2(g(l,r)-g(l,l))\)。
  • 同样的当\(r\)为奇数的时候有:
    • \(f(l,r-1)=f(l,r)-2(g(r-1,r)-g(r-1,l))\)。

      • 解释:他的差值也就是\(r-1\)在\([l,r)\)内有多少满足条件的数对。
    • \(f(l,r)=f(l,r-1)+2(g(r-1,r)-g(r-1,l))\)。
  • 于是我们只需要考虑如何快速的计算\(g(i,j)\)。
  • 定义\(h(x,n)\)为满足下列条件的\(y\)的数量。
    • \(n-lowbit(n)\leq y<n\)
    • \(x\& y==0\)
  • 那么有\(g(x,n)=h(x,n)+g(x,n-lowbit(n))(n>0)\)。
  • 对于\(h(x,n)\),我们可以在\(logn\)的时间内计算出来。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll g(int a, int b)
{
    ll res = 0;
    ll num = 0;

    for(int i = 1; i <= b; i <<= 1)
    {
        if(b & i)
        {
            b ^= i;
            if(!(a&b)) res += 1<<num;
        }
        if(!(a&i)) num++;
    }

    return res;
}

ll calc(int a, int b)
{
    if(a == b) return 0;
    if(a == 0) return 2*b - 1 + calc(1, b);
    ll res = 0;
    if(a & 1)
    {
        //f(l,r)=f(l+1,r)+2(g(l,r)-g(l,l))
        res += 2 * (g(a, b) - g(a,a));
        a++;
    }
    if(b & 1)
    {
        //f(l,r)=f(l,r-1)+2(g(r-1,r)-g(r-1,l))
        res += 2 * (g(b-1, b) - g(b-1, a));
        b--;
    }
    return res + 3 * calc(a/2, b/2);
}

int main()
{
    int T; cin >> T;
    int a, b;
    while(T--)
    {
        cin >> a >> b;
        cout << calc(a, b+1) << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zxytxdy/p/11780430.html

时间: 2024-10-03 22:29:15

CF1245F: Daniel and Spring Cleaning的相关文章

Codefroces 1245 F. Daniel and Spring Cleaning

传送门 考虑简单的容斥 设 $F(n,m)$ 表示 $a \in [1,n] , b \in [1,m]$ 的满足 $a+b=a \text{ xor } b$ 的数对的数量 那么答案即为 $F(r,r)-2F(l-1,r)+F(l-1,l-1)$ 意思就是总方案减去 $a,b$ 至少一个数小于 $l$ 再加上 $a,b$ 都小于 $l$ 的方案 然后现在考虑求 $F$ 首先显然 $a+b=a \text{ xor } b$ 意思就是二进制下不存在同时为 $1$ 的位 那么可以考虑简单的数位 $

Codeforces 1245F. Daniel and Spring Cleaning(容斥原理+数位DP)

传送门 题目大意 给你两个数,\(l,r\) 求 \([l,r]\) 中多少对 \(a+b=a\oplus b\). 思路 看了大佬的题解才知道这里要用到二维容斥. 设 \(f_{x,y}\) 是 \(a\in [0,x],b\in [0,y]\) 时满足条件的对数 那么根据容斥原理答案就是 \(f_{r,r}-f_{l-1,r}\times 2+f_{l-1,l-1}\) 对于其中每一部分都可以用一次数位DP求出来 因为这里对于统计有影响的因素只有两个数是否被限制 那么状态可以直接设计为 \(

并不对劲的CF1245E&amp;F:Cleaning Ladders

CF1245 E. Hyakugoku and Ladders 题目大意 有一个10 \(\times\) 10的网格,你要按这样的路径行走: 网格中有一些单向传送门,每个传送门连接的两个格子在同一列.传送门的方向一定是从下往上的,而且每个格子的出度至多为1,最上面一行的格子没有出去的传送门. 你的行走步骤是这样: 1.抛一枚六面骰子,如果往前走点数步不会走超过终点就往前走点数步,反之站着不动并且跳过第二步: 2.如果这一点有传送门,可以选择进传送门或不进. 在恰好走到终点上之前,你会不断重复以

使用Ratpack和Spring Boot打造高性能的JVM微服务应用

使用Ratpack和Spring Boot打造高性能的JVM微服务应用 这是我为InfoQ翻译的文章,原文地址:Build High Performance JVM Microservices with Ratpack & Spring Boot,InfoQ上的中文地址:使用Ratpack与Spring Boot构建高性能JVM微服务. 在微服务天堂中Ratpack和Spring Boot是天造地设的一对.它们都是以开发者为中心的运行于JVM之上的web框架,侧重于生产率.效率以及轻量级部署.他

Spring Boot? 使用Thymeleaf模板引擎渲染web视图

静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static /public /resources /META-INF/resources 举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件.启动程序后,尝试访问http://localhost:8080/D.jpg.如能显示图片,配置成功. 渲染

深入学习微框架:Spring Boot

由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理.在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian Colyer回应了这些批评,并且

spring boot 1.5.4 之web开发(三)

上一篇:springboot 1.5.4 入门和原理(二) spring Boot 之web开发 更多更详细的配置参考文件:application.properties和<SpringBoot之application配置详解>(新版本新增属性缺失)  或参考官网http://projects.spring.io/spring-boot/ 注意:Spring Boot工程默认沿用前文中的project,如有变动,各章节会明确说明 注释springboot工程中的application.prope

Exploring Micro-frameworks: Spring Boot--转载

原文地址:http://www.infoq.com/articles/microframeworks1-spring-boot Spring Boot is a brand new framework from the team at Pivotal, designed to simplify the bootstrapping and development of a new Spring application. The framework takes an opinionated appr

Spring Boot开发Web应用

静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static /public /resources /META-INF/resources 举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件.启动程序后,尝试访问http://localhost:8080/D.jpg.如能显示图片,配置成功. 渲染