当前位置: 首页 > news >正文

[SRM603] WinterAndSnowmen

Description

k6buiq.png

Sol

\(A=\text{XOR}(X)\),\(B=\text{XOR}(Y)\)

因为 \(A<B\),所以写下他们的二进制表示,一定是最高的几位先是相等,紧接着有一位 \(A=0\)\(B=1\),后边就随意了。

嗯那我们可以枚举 \(A\)\(B\) 二进制的 \(LCP\) 长度,这样计数就不重不漏了。

设当前枚举的长度为 \(p\), \(f[i][j][0/1][0/1]\) 表示决策完数字 \(i\)\(A\) 的前 \(p\) 位异或上 \(B\) 的前 \(p\) 位的结果为 \(j\)\(A/B\) 的第 \(p-1\) 位为 \(0/1\)

转移就是决策当前数字填在哪个集合,最后的答案就是 \(f[n][0][0][1]\)

Code

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef double db;
typedef long long ll;
const int mod=1e9+7;

class WinterAndSnowmen{
public:
    int f[2005][2049][2][2];
    int getNumber(int n,int m){
        int ans=0,mx=max(n,m);
        for(int i=11;i;i--){
            memset(f,0,sizeof f);
            f[0][0][0][0]=1;
            for(int j=1;j<=mx;j++){
                for(int p=0;p<1<<(11-i);p++){
                    for(int a=0;a<2;a++){
                        for(int b=0;b<2;b++){
                            f[j][p][a][b]=f[j-1][p][a][b];
                            if(j<=n) f[j][p][a][b]=(f[j-1][p^(j>>i)][a^(j>>i-1&1)][b]+f[j][p][a][b])%mod;
                            if(j<=m) f[j][p][a][b]=(f[j-1][p^(j>>i)][a][b^(j>>i-1&1)]+f[j][p][a][b])%mod;
                        }
                    }
                }
            } (ans+=f[mx][0][0][1])%=mod;
        } return ans;
    }
};

转载于:https://www.cnblogs.com/YoungNeal/p/10396526.html

相关文章:

  • JS高级学习笔记(1)- 基本数据类型 和 强制类型转换
  • 记账程序及GitHub学习记录
  • 尾调用和尾递归
  • AccessTokenValidation3 源码分析 jwttoken验证流程图
  • luogu P3312 [SDOI2014]数表
  • Cron表达式以及定时任务配置
  • android热修复--Tinker
  • csv文件读写处理
  • 友链
  • HTML5 File API 全介绍
  • Grafana 利用Grafana Variables变量配置快速切换不同主机的图表数据展示
  • 在Windos上安装Nginx
  • [UE4]VR手柄按键参考
  • 2019 GDUT Rating Contest II : Problem G. Snow Boots
  • ORACLE查看数据库已安装补丁
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 78. Subsets
  • iOS编译提示和导航提示
  • Java 23种设计模式 之单例模式 7种实现方式
  • k8s 面向应用开发者的基础命令
  • Koa2 之文件上传下载
  • Mac转Windows的拯救指南
  • Mybatis初体验
  • php中curl和soap方式请求服务超时问题
  • Python 基础起步 (十) 什么叫函数?
  • scrapy学习之路4(itemloder的使用)
  • SQLServer之创建显式事务
  • 初识 webpack
  • 关于字符编码你应该知道的事情
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 计算机常识 - 收藏集 - 掘金
  • 力扣(LeetCode)21
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端相关框架总和
  • 全栈开发——Linux
  • 实习面试笔记
  • 实现简单的正则表达式引擎
  • 跳前端坑前,先看看这个!!
  • 以太坊客户端Geth命令参数详解
  • HanLP分词命名实体提取详解
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #Z0458. 树的中心2
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (vue)页面文件上传获取:action地址
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)