【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 ...
随机推荐
- Redis Sentinel 集群搭建常见注意事项
我的配置: 1个master,1个slave,3个sentinel 搭建的过程网上已经有很多了,这里列几个重点关注: 修改sentinel.conf的protected-mode与redis.conf ...
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...
- CodeIgniter框架通过URL向控制器传递参数
通过URL传递参数的方法是GET,在CodeIgnter框架中,通过URL有两种方式向控制器传递参数: 一种是键值对的形式. 一种是类似于文件路径的形式,这个时候,不是以键值对的形式了,我们只传递值. ...
- MySql concat与字符转义
mysql函数之四:concat() mysql 多个字段拼接 - duanxz - 博客园https://www.cnblogs.com/duanxz/p/5098875.html mysql 多个 ...
- HTML5经典实例——1基础语法和语义
1指定DOCTYPE 在页面的最开始处指定HTML5 DOCTYPE DOCTYPE是不区分大小写的.可以任意的使用大小写. <!DOCTYPE html> <html lang=& ...
- Golang的md5 hash计算
Golang计算md5值的方法都是接收byte型slice([]byte).而且使用习惯上也觉得略奇怪. 看了好几个例子才看懂. 感觉Golang标准库在设计这些模块的时候,都会考虑使用带New关键字 ...
- kibana简单使用——elaticsearch的文档,索引的CRUD操作
1.初始化索引: #number_of_shards:分片的数量,mo'ren默认为5 #number_of_replicas:副本副本的副本的数量 #shards一旦设置不能修改 PUT lagou ...
- 日历插件bootstrap-datetimepicker的使用感悟
首先队长先综述一下插件的使用三步流程:即 1.引入插件 2.使用jquery选择器选择目标标签 3.对目标标签绑定插件函数来触发插件 雷同于python中的库的使用(安装库 导入库 引用库) 下面 ...
- solr配置ik中文分词(二)
上一篇文章主要介绍了solr的安装与配置,这篇文章主要记录如何使用ik分词器对中文进行分词. 步骤: 1.下载ik分词jar包:ik-analyzer-solr5-5.x.jar. 2.将下载的jar ...
- 二、.Net 连接mycat
一.mycat 单体的mysql已经过去 二.引用Mycat包 三.代码 using Pomelo.Data.MyCat; using System; using System.Collections ...