传送门

luogu

其实这题的某个位置\((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的更多相关文章

  1. 【CF809C】Find a car(动态规划)

    [CF809C]Find a car(动态规划) 题面 洛谷 CF 有一个无穷大的矩阵,第\(i\)行第\(j\)列的数是\((i-1)xor(j-1)+1\),\(q\)次询问,每次询问一个矩形内数 ...

  2. 洛谷CF809C Find a car(数位DP)

    洛谷题目传送门 通过瞪眼法发现,\(a_{i,j}=(i-1)\text{ xor }(j-1)+1\). 二维差分一下,我们只要能求\(\sum\limits_{i=0}^x\sum\limits_ ...

  3. $CF809C\ Find\ a\ car$ 数位$dp$

    正解:数位$dp$ 解题报告: 传送门! 然后因为没有翻译所以先放个翻译$QAQ$ 有一个无穷大的矩阵,第$i$行第$j$列的数是$(i-1)\ xor\ (j-1)+1$,有$q$次询问,每次询问一 ...

  4. CF809C(找规律+数位DP)

    老年选手需要多写一些思维题qwq. 通过打表很容易发现对于(i,j),值为(i-1)^(j-1)+1,然后本题就没了qwq. 矩阵差分还是很容易想到的,容斥成四个矩阵. 然后看到异或很容易想到三件事: ...

随机推荐

  1. Java Number & Math 类

    // java.lang.Math 常用 // xxxValue() 方法用于将 Number 对象转换为 xxx 数据类型的值并返回. System.out.println(((Integer) 5 ...

  2. 生成SSH密钥添加到GitHub

    将自己的过程和踩坑写下来 一.检查是否有SSH 1.打开Git的目录文件,下图是我电脑中git的文件目录 2.点击git-bash.exe,输入ssh查看电脑中是否已存在ssh,会出现以下结果,证明已 ...

  3. 网上找的Backbone.js

    // Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely ...

  4. 外显子分析思路总结(Exome Sequencing Analysis review)

    趁着周末,大好的日子,总结了一下外显子分析的思路(套路)

  5. GWAS研究可利用的数据库(持续更新)

    1.列表包括数据库名称.表型.是否能下载到基因型(genotype).是否能下载到GWAS结果文件(P值.效应值.SNP位点).目前收集到的有如下: 参考到这些数据库的文献:Genome-wide a ...

  6. echarts柱状图鼠标移动在柱状图上显示数据给数据添加单位

    解决问题: 关键代码如下: tooltip : { trigger: 'axis', formatter:function(params){ return params[0].name+"& ...

  7. [USACO07NOV] Milking Time

    题目链接 动态规划转化成 DAG 然后拓扑求解的思路 虽然很简单不过感觉这个新思路会很有用! 如果两个事件互不影响并且有先后关系,就可以连一条有向边,跑最长路可以得到最后的最优解 实际上这还是个背包… ...

  8. 新买苹果电脑,mac系统中小白应该了解哪些东西?

    本文旨在分享新买了mac电脑,应该做哪些设置,帮助苹果电脑小白轻松上手使用mac电脑,当然,新电脑肯定是需要安装各种软件,这里,小编推荐一下可以看看小编写的mac软件装机必备Mac 装机必备软件推荐, ...

  9. 2017-12-18python全栈9期第三天第三节之int bool str转换之数字转换成二进制的位数

    #!/user/bin/python# -*- coding:utf-8 -*-i= 100print(i.bit_length())

  10. python德国信用评分卡建模(附代码AAA推荐)

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python信用评分卡建模视频系列教程(附代码)  博主录制 https://study.163.com/course/i ...