CF809C Find a car
其实这题的某个位置\((i,j)\)的数是\((i-1)\mathrm{xor}(j-1)+1\)
首先一个矩形的答案可以拆成\((x2,y2)-(x1-1,y2)-(x2,y1-1)+(x1-1,y1-1)\)
然后这里有三个限制\(i\le x,j\le y,i\ \mathrm{xor}\ j\le k\),可以考虑dp之类的.我们从高位往低位做,设\(f_{i,j,k,l}\)表示第\(i\)位,现在的\(i,j,i\ \mathrm{xor}\ j\)是否达到上界的权值和,转移枚举下一位是什么,如果当前这个数在上界,可以让他继续卡着上界,也可以不卡上界;否则可以随便放
注意那个\(+1\),我们另外设\(g_{i,j,k,l}\)表示方案数,答案为所有权值和+方案数
#include<bits/stdc++.h>
#define LL long long
#define db double
#define il inline
using namespace std;
const int N=3e5+10,mod=1e9+7;
il LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int f[2][2][2][2],g[2][2][2][2];
void ad(int &x,int y){x+=y,x-=(x>=mod)?mod:0;}
LL sov(int mx,int my,int mk)
{
if(mx<0||my<0) return 0;
memset(f,0,sizeof(f)),memset(g,0,sizeof(g));
int nw=1,la=0;
g[0][1][1][1]=1;
for(int i=30;~i;--i)
{
int x=mx>>i&1,y=my>>i&1,kk=mk>>i&1;
for(int j=0;j<=1;++j)
for(int k=0;k<=1;++k)
for(int l=0;l<=1;++l)
{
if(!g[la][j][k][l]) continue;
for(int xx=0;xx<=(x|(!j));++xx)
for(int yy=0;yy<=(y|(!k));++yy)
if((xx^yy)<=kk||!l)
{
ad(f[nw][j&(xx==x)][k&(yy==y)][l&((xx^yy)==kk)],(f[la][j][k][l]+1ll*g[la][j][k][l]*((xx^yy)<<i)%mod)%mod);
ad(g[nw][j&(xx==x)][k&(yy==y)][l&((xx^yy)==kk)],g[la][j][k][l]);
}
f[la][j][k][l]=g[la][j][k][l]=0;
}
nw=!nw,la=!la;
}
int ans=0;
for(int j=0;j<=1;++j)
for(int k=0;k<=1;++k)
for(int l=0;l<=1;++l)
ad(ans,(f[la][j][k][l]+g[la][j][k][l])%mod);
return ans;
}
int main()
{
//aha
int T=rd();
while(T--)
{
int ax=rd()-1,ay=rd()-1,bx=rd()-1,by=rd()-1,k=rd()-1;
printf("%lld\n",(sov(bx,by,k)-sov(ax-1,by,k)-sov(bx,ay-1,k)+sov(ax-1,ay-1,k)+mod+mod)%mod);
}
return 0;
}
CF809C Find a car的更多相关文章
- 【CF809C】Find a car(动态规划)
[CF809C]Find a car(动态规划) 题面 洛谷 CF 有一个无穷大的矩阵,第\(i\)行第\(j\)列的数是\((i-1)xor(j-1)+1\),\(q\)次询问,每次询问一个矩形内数 ...
- 洛谷CF809C Find a car(数位DP)
洛谷题目传送门 通过瞪眼法发现,\(a_{i,j}=(i-1)\text{ xor }(j-1)+1\). 二维差分一下,我们只要能求\(\sum\limits_{i=0}^x\sum\limits_ ...
- $CF809C\ Find\ a\ car$ 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 然后因为没有翻译所以先放个翻译$QAQ$ 有一个无穷大的矩阵,第$i$行第$j$列的数是$(i-1)\ xor\ (j-1)+1$,有$q$次询问,每次询问一 ...
- CF809C(找规律+数位DP)
老年选手需要多写一些思维题qwq. 通过打表很容易发现对于(i,j),值为(i-1)^(j-1)+1,然后本题就没了qwq. 矩阵差分还是很容易想到的,容斥成四个矩阵. 然后看到异或很容易想到三件事: ...
随机推荐
- String:字符串常量池
String:字符串常量池 作为最基础的引用数据类型,Java 设计者为 String 提供了字符串常量池以提高其性能,那么字符串常量池的具体原理是什么,我们带着以下三个问题,去理解字符串常量池: 字 ...
- Django 模板 继承和包含
##### 母版 ##### 这里是头部 {% block body-content %}{% endblock %} 这里是底部 #### 继承模板 ### {% extends 'layout.h ...
- smartProgram学习笔记
背景:转正前要完成这样一个编程课的学习.平时写代码只是完成基本的功能,没有养成良好的习惯,感觉这样的课程还是要好好学习下,要不真是不知道什么叫写代码. Week1 为什么要写好代码? 因为平时读:写代 ...
- 象棋start
这篇文章其实谈的不是象棋开局,更谈不上开局技巧,举个例子:第一步走炮二平五,也即是中炮局,但中炮局可以根据对手的应对着法演变成很多,比如:五七炮对屏风马,五六炮对屏风马,顺炮局,以及雷公炮等等,这些才 ...
- prototype 与 proto的关系是什么:
__proto__是什么? 我们在这里简单地说下.每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__proto_ ...
- HDU3974 Assign the task
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Transactional 事务
1.事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚 其实像第一种try catch这种把整个包裹起来,这种业务方法也就等于脱离了spring事务的管理,因为没有任何异常会从业务方法中 ...
- Mac idea中git igenore设置
- SSH框架调用scrapy爬虫
毕设刚答辩完毕,不用担心查重了,所以补一篇毕设的内容. 毕设是图片搜索网站,使用python爬虫获取图片资源,再由javaweb管理使用图片的信息和图片,大部分实现起来十分简单,也不好意思炫耀.但是有 ...
- BZOJ3531 树剖 + 动态开点线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=3531 首先这题意要求树链上的最大值以及求和,其树链剖分的做法已经昭然若揭 问题在于这次的信息有宗教 ...