2020ICPC上海站 C. Sum of Log
题目大意:
给定T组X,Y,对于每组X,Y,求上面式子
的值,其中
当x为真时等于1,其他情况等于0. 其中
。
思路:
对X,Y一起进行数位DP,我们把每一位枚举数字的上限以及数字之前是否有前导零(当X,Y枚举到这一位二者都有前导零时才为true)都直接记录到这一位的状态里面,然后在枚举每一位的时候,枚举X,Y在这一位上面所有可能的组合(i,j)。如果i&j为1,那么X&Y就一定不为0,便不会对答案产生贡献,这种情况下的后面若干位就不用枚举了。否则,对答案产生了贡献,由于在X&Y=0的时候二者相加不会进位,所以对答案的贡献就是二者中最高位的1的pos + 1。以此阶段之后枚举的所有合法数字都会产生同样的这一个贡献,所以ans+=dfs()*(pos+1)(之后的数字lead都不会为true,所以这里的dfs返回的实际是合法数字的个数),否则ans+=dfs()(仅统计合法数字的个数,避免重复的计算)。
最后答案为dfs(pos-1,true,true,true)-1(因为0,0不考虑,所以要减去)
由于每次构成dp状态的数字的组成都不一样,所以必须在循环内memset
代码:
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
//#define int LL
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#pragma warning(disable :4996)
const int maxn = 100010;
const double eps = 1e-6;
const int mod = 1000000007;
const LL MOD = 998244353;
int T;
int X, Y;
int x[35], y[35];
LL dp[35][2][2][2];//位,x上限,y上限,前导零
//lead:x,y当前同时有前导零
LL dfs(int pos, bool xlim, bool ylim, bool lead)//把限制直接搞成状态
{
if (pos == -1)
return 1;
if (dp[pos][xlim][ylim][lead] != -1)
return dp[pos][xlim][ylim][lead];
int upx = (xlim ? x[pos] : 1);
int upy = (ylim ? y[pos] : 1);
LL ans = 0;
for (int i = 0; i <= upx; i++)
{
for (int j = 0; j <= upy; j++)
{
if (i & j)
continue;//数字非法,不往下进行枚举
int cnt = 1;
if (lead && (i || j))
cnt = pos + 1;
ans = (ans + dfs(pos - 1, xlim && i == upx, ylim && j == upy, lead && !i && !j) * cnt % mod) % mod;
}
}
return dp[pos][xlim][ylim][lead] = ans;
}
int calc(int a, int b)
{
memset(x, 0, sizeof(x));
memset(y, 0, sizeof(y));
int pos1 = 0, pos2 = 0;
while (a)
{
x[pos1++] = a % 2;
a >>= 1;
}
while (b)
{
y[pos2++] = b % 2;
b >>= 1;
}
return dfs(max(pos1, pos2) - 1, true, true, true);
}
void solve()
{
cout << (calc(X, Y) - 1 + mod) % mod << endl;
}
int main()
{
cin >> T;
while (T--)
{
memset(dp, -1, sizeof(dp));
cin >> X >> Y;
solve();
}
return 0;
}
2020ICPC上海站 C. Sum of Log的更多相关文章
- sqlservr (708) 打开日志文件 C:\Windows\system32\LogFiles\Sum\Api.log 时出现错误 -1032 (0xfffffbf8)
在windows server 2012 standard上新安装好的SQL Server 2014,查看错误日志,发现此报错 sqlservr (708) 打开日志文件 C:\Windows\sys ...
- Path Sum
需如下树节点求和 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 JavaScript实现 window ...
- awk技巧 nginx access.log
1.1 介绍 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...
- the sum of two fixed value
the sum of two fixed value description Input an array and an integer, fina a pair of number in the a ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- JavaScript学习总结(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- JavaScript学习总结(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- Array的个人总结
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...
- ES6扫盲
原文阅读请点击此处 一.let和const { // let声明的变量只在let命令所在的代码块内有效 let a = 1; var b = 2; } console.log(a); // 报错: R ...
随机推荐
- MacBook USB 连 iPhone 响个不停,充电频繁的连上/断开
电脑是 MacBook Pro (Retina, 15-inch, Mid 2015) 连 iPhone 响个不停,充电频繁的连上 /断开,数据线是原装的,想连接爱思助手连接不上. 网上方法 1 开启 ...
- Nginx代理的方式(反向代理)
目录 一:Nginx 正向代理与反向代理 1.什么是代理服务器? 2.正向代理的概念 3. 反向代理的概念 二:Nginx代理服务支持的协议 三:Nginx代理实践 1.部署web01 2.部署lb0 ...
- C++ 反汇编:关于Switch语句的优化措施
流程控制语句是C语言中最基本的判断语句,通常我们可以使用IF来构建多分支结构,但同样可以使用Switch语句构建,Switch语句针对多分支的优化措施有4种形式,分别是,IF-ELSE优化,有序线性优 ...
- python 小兵(10)内置函数
内置函数(下午讲解) 什么是内置函数?就是python帮我们提供的一个工具,拿过直接用就行,比如我们的print,input,type,id等等.截止到python3.6.2版本 中一共提供了68个内 ...
- maven 中的工程依赖和层级依赖?
一.什么是工程依赖? 思考问题?1.1一旦开始分模块开发的时候,之前的所有包都会被拆分成一个一个的项目 model mapper service ... 其实mapper需要model的支持,怎么解决 ...
- Arduino+ESP32 之 驱动GC9A01圆形LCD(二),移植LVGL,跑示例程序,显示自制图片
在前文Arduino+ESP32 之 驱动GC9A01圆形LCD(一), 我们已经移植好了arduino GFX库, 该库的示例程序内,还有LVGL的示例程序哦. arduino环境下移植lvgl是很 ...
- Nginx配置转发
nginx location proxy_pass 后面的url 加与不加/的区别 在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把locat ...
- 可能用得上的UI控件
为了便于开发者打造各式各样的优秀App,UIKit框架提供了非常多功能强大又易用的UI控件以下列举一些在开发中可能用得上的UI控件: 红色表明最常用,蓝色代表一般,黑色代表几乎不用(这不是绝对的, ...
- mysql查询奇数行或者偶数行数据
select * from (select @rownum := @rownum+1 as row_num, t.* from 表名 t,(select @rownum:=0) tmp_table o ...
- MSTP多生成树协议
MSTP多生成树协议 目录 MSTP多生成树协议 1.MSTP(Multiple Spanning Tree Protocol)概述 2.STP.RSTP.PVST的应用缺陷 3.MSTP的主要特点 ...