传送门

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. KVM环境安装macOS Sierra

    一.在macOS系统中生成ISO文件:1.在App Store中搜索.下载macOS Sierra系统. App Store --> macos --> macOS Sierra --&g ...

  2. 微信小程序框架——wepy使后感

    更新:2018年1月10日15:32:22 在ios8及部分机型下会有样式混乱的问题,经查找,原因是缺少浏览器前缀,需要加prefix. 解决方案见链接:wepy-less-autoprefix 另外 ...

  3. bzoj2434 阿狸的打字机

    题目链接 思路 可以发现,其实题目中所描述的操作,就是在\(AC\)自动机上走的过程.输出就是打上标记.删除就是返回父亲节点. 然后看询问.每次询问字符串\(x\)在字符串中\(y\)出现的次数.其实 ...

  4. 苹果电脑利用curl下载数据集

    在看tensorflow书上迁徙学习的这一部分的时候,书上说利用 curl http://download.tensorflow.org/example_images/flower_photos.tg ...

  5. php mkdir No such file or director问题

    有时使用mkdir创建目录时会出现 No such file or director这样的错误,导致这个错误的原是 比如你要创建目录 a\b\c目录,但是创建时父目录b也不存在时就会出现这样的问题. ...

  6. CodeForces755F 贪心 + 多重背包二进制优化

    https://cn.vjudge.net/problem/615831/origin 题意 n个人;  计划是每个人都拿一个礼物来送给一个除了自己之外的人;  如果一个人没有送出礼物,那么它和它送礼 ...

  7. nGrinder TestRunner XFF / X-Forwarded-For

    s 我们在压测请求报文里面带了这个"x-forward-for":"10.24.51.132"这个字段,所以我们所有的压测请求穿透到应用系统的时候,应用系统上采 ...

  8. JAVA核心技术I---JAVA基础知识(抽象类和接口)

    一:抽象类 (一)定义 类:属性(0或多个)+方法(0或多个)一个完整(健康)的类:所有的方法都有实现(方法体)类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类一个完整的类才可以被实例化, ...

  9. Spring Boot 启动:No active profile set, falling back to default profiles: default

    启动 Spring Boot 失败,但是没有出现多余的异常信息: 检查之后发现是依赖的问题(之前依赖的是 spring-boot-starter),修改即可: 方法二: pom.xml加上下面两个依赖 ...

  10. 如何比较一个类型【模板使用】【sizeof用法】

    #include <iostream> using namespace std; void testEmptyClass(); struct Empty { }; struct Dummy ...