2020 CCPC网络赛 - 1012 Xor

2023-05-16

题意:

求 满 足 x ∈ [ 0 , A ] , y ∈ [ 0 , B ] , ∣ x − y ∣ ≤ K , x   X O R   y ≤ W 的 ( x , y ) 的 对 数 求满足x \in [0,A],y \in [0,B],|x-y| \leq K,x \ XOR \ y \leq W 的(x,y)的对数 x[0,A],y[0,B],xyK,x XOR yW(x,y)

Solution:

∣ x − y ∣ ≤ K ⇒   x − y ≤ K   a n d   y − x ≤ K   ⇒   y − x + K ≥ 0   a n d   x − y + K ≥ 0 |x-y| \leq K \Rightarrow \ x-y\leq K \ and \ y-x \leq K \ \Rightarrow \ y-x+K \geq 0 \ and \ x-y+K \geq 0 xyK xyK and yxK  yx+K0 and xy+K0
我们可以在 D F S DFS DFS中记录当前 ( y − x + K ) / ( x − y + K ) (y-x+K) /(x-y+K) (yx+K)/(xy+K) 的值,但由于两个式子的取值范围很大,我们不能直接进行 D P DP DP
对 于 每 一 位 我 们 存 在 的 转 移 为 : { b e f y − x + K ∗ 2 + ( b i t y − b i t x ) + b i t K b e f x − y + K ∗ 2 + ( b i t x − b i t y ) + b i t K 对于每一位我们存在的转移为:\\ \left\{\begin{matrix} bef_{y-x+K}*2+(bit_y - bit_x) +bit_K& \text{}\\ bef_{x-y+K}*2+(bit_x - bit_y) +bit_K& \text{}\\ \end{matrix}\right. :{befyx+K2+(bitybitx)+bitKbefxy+K2+(bitxbity)+bitK
.
发现 ( b i t x − b i t y ) + b i t K   ∈ [ − 1 , 2 ] (bit_x - bit_y) + bit_K \ \in[-1,2] (bitxbity)+bitK [1,2],那显然如果 b e f < − 2    , bef < -2 \ \ , bef<2  , b e f ∗ 2 + ( b i t x − b i t y ) + b i t K < 0 bef*2 +(bit_x - bit_y) + bit_K < 0 bef2+(bitxbity)+bitK<0恒成立的,如果 b e f ≥ 1 bef \geq 1 bef1,上述式子大于等于 0 0 0恒成立.
故式子的取值只有 0 , 大 于 0 , − 1 , 小 于 − 1 0,大于0,-1,小于-1 0,0,1,1四种情况,此时我们直接数位DP即可

Code:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <bitset>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int maxn = 1e5+7;

int A,B,K,W;
ll dp[63][3][3][2][2][2];
int vis[63][3][3][2][2][2];
ll bit[63];

int getbool(bool x) {
    return x? 1:0;
}

int getbit(int x,int y) {
    return (x&y)? 1:0;
}

ll dfs(int wei,int c1,int c2,bool lim1,bool lim2,bool lim3) {
    if(vis[wei][c1+1][c2+1][getbool(lim1)][getbool(lim2)][getbool(lim3)]) return dp[wei][c1+1][c2+1][getbool(lim1)][getbool(lim2)][getbool(lim3)];
    if(wei == -1) {
        return c1 >= 0 && c2 >= 0? 1:0;
    }
    int lt1 = lim1? getbit(bit[wei],A):1;
    int lt2 = lim2? getbit(bit[wei],B):1;
    int lt3 = lim3? getbit(bit[wei],W):1;
    int t = getbit(K,bit[wei]);
    ll res = 0;
    for(int i=0;i<=lt1;i++) {
        for(int j=0;j<=lt2;j++) {
            int x = i,y = j;
            int nc1 = c1*2 + (x-y) + t, nc2 = c2*2 + (y-x) + t;
            if(nc1 < -1 || nc2 < -1 || (x^y) > lt3) continue;
            res += dfs(wei-1,min(nc1,1),min(1,nc2),(lim1 && x == lt1),(lim2 && y == lt2),(lim3 && (x^y) == lt3));
        }
    }
    vis[wei][c1+1][c2+1][getbool(lim1)][getbool(lim2)][getbool(lim3)]= 1;
    dp[wei][c1+1][c2+1][getbool(lim1)][getbool(lim2)][getbool(lim3)] = res;
    return res;
}

int main() {
    bit[0] = 1;
    for(int i=1;i<=35;i++) bit[i] = (bit[i-1]<<1);
    int tes;
    scanf("%d",&tes);
    while(tes--) {
        scanf("%d%d%d%d",&A,&B,&K,&W);
        memset(dp,0,sizeof(dp));
        memset(vis,0,sizeof(vis));
        printf("%lld\n",dfs(35,0,0,true,true,true));
    }

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2020 CCPC网络赛 - 1012 Xor 的相关文章

  • 第十一周作业-必做1

    题目描述 xff1a 蒜头君从现在开始工作 xff0c 年薪 N万 他希望在蒜厂附近买一套 60平米的房子 xff0c 现在价格是 200万 假设房子价格以每年百分之 K 增长 xff0c 并且蒜头君未来年薪不变 xff0c 且不吃不喝 x
  • conda环境下如何升级python?

    并不能使用pip Python这个东西相当于一切程序库的底子 xff0c 也就是其他的库都在他的上面 xff0c 这个地位不一样 xff0c 随意不能直接使用pip进行升级 需要使用其他的命令 使用 conda update python
  • Pycharm环境调整

    我们在使用pycharm创建项目的时候我们可以直接选择创建项目在什么环境之上 但是大多时候我们都是直接在别人的工作上进行二次开发 xff0c 所以这时候就涉及直接打开代码 xff0c 这就需要我们自行调整Python环境 0 准备工作 1
  • 生成网络论文阅读:DDPM(一):Denoising Diffusion Probabilistic Models论文概述

    结构速览 1 论文的整体逻辑是什么2 具体怎么加入噪声和去掉噪声的2 1加入参数的大致指导思想2 2具体怎么加入噪声2 3怎么去掉噪声 xff08 问题最后转化为怎么估算噪声 xff09 2 4怎么估计噪声 xff08 实际上怎么训练 xf
  • 定位系列论文阅读:WiCluster(二): Passive Indoor 2D/3D Positioning using WiFi without Precise Labels

    0 Abstract We introduce WiCluster a new machine learning ML approach for passive indoor positioning using radio frequenc
  • 扩散模型相关论文阅读,扩散模型和知识蒸馏的结合提升预测速度:Progressive Distillation for Fast Sampling of Diffusion Models

    目录 论文地址及代码速览主要解决的问题 扩散模型预测慢 0 Abstruct0 1 逐句翻译总结 1 INTRODUCTION1 1逐句翻译第一段 xff08 扩散模型在各个方面取得很好的成果 xff09 第二段 xff08 提出扩散模型预
  • 轨迹预测Leapfrog Diffusion Model for Stochastic Trajectory Prediction

    结构速览 论文速读 解决什么问题 解决这个问题的几个关键点 总体架构上面提出了哪些创新 如何实现蛙跳 如何处理轨迹表达和训练问题 0 Abstract 1 Introduction 第一段 介绍轨迹预测这个研究方向 第二段 前人未来轨迹预测
  • 如何关闭鼠标加速效果

    如何关闭鼠标加速效果 一 第一项二 第二项 如果要关闭鼠标加速 xff0c 一共需要改变两项设置 xff0c 缺一不可 一 第一项 1 按下win 43 R键 xff0c 然后输入control xff0c 点击确定 2 点击轻松使用 3
  • [算法设计题] 判断回文字符序列

    判断回文字符序列 要求 如 abcba 是回文 xff1b good 就不是回文 算法思想 对字符串的前一半进行入栈操作 xff0c 然后从栈里回去栈顶元素与字符串的后一半第一个字符进行比较 若相等则重复此操作 否则可以直接判断改字符序列不
  • Autoware1.14运行官网Demo 适配镭神激光雷达

    项目场景 xff1a Autoware1 14 运行官网demo 适配镭神16线激光雷达 运行官网Demo 1 创建 autoware文件夹 xff0c 下载官网数据包 xff0c 并解压 span class token function
  • 磁盘问题--系统盘出现只读现象( read-only file system)

    一 说明现象原因 1 问题现象 xff0c 创建文件或者创建目录都只读 touch cannot touch file test read only file system 2 问题说明 当文件系统自身的校验机制发现文件系统存在问题时 xf
  • 第十一周作业-必做3

    题目描述 xff1a Julius Caesar 曾经使用过一种很简单的密码 对于明文中的每个字符 xff0c 将它用它字母表中后 55 位对应的字符来代替 xff0c 这样就得到了密文 比如字符 A 用 F 来代替 如下是密文和明文中字符
  • 实现用python简易演奏《数鸭子》

    前几天上课老师给我们讲了两个模块 xff0c 然后利用这两个模块来模拟钢琴键盘去简单地演奏 数鸭子 今天来分享给大家 模块1 xff1a winsound 模块2 xff1a keyboard winsound xff1a winsound
  • 控制台报错整理

    一 无法将 npm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 xff0c 如果包括路径 xff0c 请确保路径正确 xff0c 然后再试一次 情景 在第一次初启项目时 xff0c 安装好node xff0c
  • git常用命令

    安装git 在git的官网下载需要的版本 安装完成后需要设置用户的用户名和邮箱 git config global user name 34 Your Name 34 例如 xff1a config global user name 34
  • 表格td实现可编辑

    html xff08 elementUi中的表格 xff0c 传入位置和当前值 xff09 methods xff08 生成input xff0c 将当前输入的value值等于当前单元格的值 xff09 handleChangeCorrec
  • vue开发实例

    1 利用三元表达式实现对元素样式动态赋值 2 vue中 实现点击下载图片
  • Elementui 踩过的坑

    select下拉框 这个是Elementui 官网 Select选择器的基础用法 xff0c 现在想要更改它本身自带的默认样式 lt template gt lt el select v model 61 34 value 34 place
  • WSL2图形化界面踩坑记录

    问题 xff1a 启动xfce4时 xff0c 报错 xff1a xfsm manager load session Something wrong with home shenshiyi cache sessions xfce4 sess
  • CSP M1-A 咕咕东的奇遇

    题意 xff1a 字母a z首尾相接成环 xff0c 开始时指针指向a xff0c 圆环可以顺时针或者逆时针旋转 xff0c 给定一个字符串 xff0c 计算旋转依次得到该字符串的每一个字符最少需要转多少格 Input 一个字符串 长度 l

随机推荐