【CF809C】Find a car(动态规划)
【CF809C】Find a car(动态规划)
题面
洛谷
CF
有一个无穷大的矩阵,第\(i\)行第\(j\)列的数是\((i-1)xor(j-1)+1\),\(q\)次询问,每次询问一个矩形内数小于等于\(k\)的数的和。
题解
询问等价于\(\sum_{i=l}^r\sum_{j=L}^R [i\oplus j\le k]i\oplus j\)。
把询问拆分成四个从\(1\)开始的东西,即\([1..r,1..R],[1..l-1,1..R],[1..r,1..L-1],[1..l-1,1..L-1]\)。
那么就可以大力数位\(dp\)了,设\(f[i][0/1][0/1][0/1]\)表示\(i\)是否卡在界上,\(j\)是否卡在界上,\(i\oplus j\)是否卡在界上,需要同时记录方案数和和。
大力转移一下就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MOD 1000000007
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int f[32][2][2][2],g[32][2][2][2];
int Calc(int L,int R,int K)
{
if(L<0||R<0)return 0;
memset(f,0,sizeof(f));memset(g,0,sizeof(g));f[31][0][0][0]=1;
for(int i=30;~i;--i)
for(int a=0;a<=1;++a)
for(int b=0;b<=1;++b)
for(int k=0;k<=1;++k)
{
if(!f[i+1][a][b][k])continue;
for(int A=0;A<=1;++A)
for(int B=0;B<=1;++B)
{
if(!a&&A&&!(L&(1<<i)))continue;
if(!b&&B&&!(R&(1<<i)))continue;
if(!k&&!(K&(1<<i))&&(A^B))continue;
int na=a,nb=b,nk=k;
if(!A&&(L&(1<<i)))na|=1;
if(!B&&(R&(1<<i)))nb|=1;
if(!(A^B)&&(K&(1<<i)))nk|=1;
add(f[i][na][nb][nk],f[i+1][a][b][k]);
add(g[i][na][nb][nk],g[i+1][a][b][k]);
if(A^B)add(g[i][na][nb][nk],1ll*(1<<i)*f[i+1][a][b][k]%MOD);
}
}
int ret=0;
for(int a=0;a<=1;++a)
for(int b=0;b<=1;++b)
for(int k=0;k<=1;++k)
add(ret,g[0][a][b][k]),add(ret,f[0][a][b][k]);
return ret;
}
int main()
{
int Q=read();
while(Q--)
{
int x1=read()-1,x2=read()-1,y1=read()-1,y2=read()-1,k=read()-1;
int ans1=(Calc(y1,y2,k)+Calc(x1-1,x2-1,k))%MOD;
int ans2=(Calc(x1-1,y2,k)+Calc(y1,x2-1,k))%MOD;
int ans=(ans1+MOD-ans2)%MOD;
printf("%d\n",ans);
}
return 0;
}
【CF809C】Find a car(动态规划)的更多相关文章
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C#动态规划查找两个字符串最大子串
//动态规划查找两个字符串最大子串 public static string lcs(string word1, string word2) { ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- 【BZOJ1700】[Usaco2007 Jan]Problem Solving 解题 动态规划
[BZOJ1700][Usaco2007 Jan]Problem Solving 解题 Description 过去的日子里,农夫John的牛没有任何题目. 可是现在他们有题目,有很多的题目. 精确地 ...
- POJ 1163 The Triangle(简单动态规划)
http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
随机推荐
- 阿里云服务器使用镜像市场上的环境以后sql不能远程问题
关于阿里云的服务器,首先要说的就是买了以后是没有环境的,什么都需要自己配置,也是在这个上面栽了很多跟头最后去的镜像市场买的一个IIS8+SQL2016的asp.net环境 怎么说呢,感觉有些问题的本源 ...
- Python_字典及其操作
字典 概念 字典,Python基础数据类型之一,{}以键值对的形式存储数据. 以key : value 形式存储数据.例如,name 为 key,Laonanhai 为 value. dic = {' ...
- RestTemplete
RestTemplete是由spring提供的,可以用来模拟浏览器进行服务调用的封装好的Api,和Apache 的HttpClient功能相同,在分布式系统中可以用来服务之间的调用. 开发步骤: 1. ...
- windows中在vs code终端使用bash
vs code Visual Studio Code的缩写,很好用的一个编辑器. 终端 vs code的终端(命令行)在windows中,默认使用的是powershell,如下图所示: powersh ...
- Jenkins+Docker自动化集成环境搭
关于Docker Docker 简介 Docker现在是Github社区最火的项目之一,Docker是个容器,或许你听过lxc,你可能知道Tomcat这个Web容器,容器是什么概念,意会就好.问个问题 ...
- 4 HttpServletResponse 与 HttpServletRequest
Web 服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest 和 HttpServletReponse 对象,response用于向客户端发送数据,request用于 ...
- Unit 1.前端基础之html
一.什么是html 定义:全称是超文本标记语言(HyperText Markup Language),它是一种用于创建网页的标记语言.标记语言是一种将文本(Text)以及文本相关的其他信息结合起来,展 ...
- Day5-1 面向对象和面向过程
摘要: 类的定义 类的增删改查 对象的增删改查 对象的查找和绑定 面向对象和面向过程的区别: 1.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...
- Day 4-5 序列化 json & pickle &shelve
序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他 ...
- python语法糖/装饰器
1.python高阶函数和嵌套函数 1.1高阶函数 def func1(x): return x**2 def func2(x): return x**3 def func(x,y): return ...