codeforces 809C Find a car

题意

有个\(1e9*1e9\)的矩阵,行 \(x\) 从上到下递增,列 \(y\) 从左到右递增。每个格子有一个正值。\((x, y)\) 的值为 \((i, y)、(x, j) (1<=i<x, 1<=j<y)\) 中没有出现过的最小正整数。

\(1e4\)次询问,每次询问一个子矩阵中值小于等于\(k\)的数之和。

题解

1、\(val(x, y) = (x-1) XOR (y-1) + 1\)

类比尼姆博弈可证。

2、非递归形式的数位dp。\(cnt[p][i][j][k]、sum[p][i][j][k]\)。

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define rep(i, a, b) for(int i=(a); i<(b); i++)
#define sz(x) (int)x.size()
#define de(x) cout<< #x<<" = "<<x<<endl
#define dd(x) cout<< #x<<" = "<<x<<" "
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
//------ const int mod=1e9+7, N=33; ll sum[N][2][2][2], cnt[N][2][2][2]; void upd(ll &a,ll b) {
a=(a+b)%mod;
if(a<0) a+=mod;
} ll solve(int x,int y,int n) {
if(x<0||y<0) return 0;
vi dx, dy, dn;
rep(i,0,N) {
dx.pb(x&1);
dy.pb(y&1);
dn.pb(n&1);
x>>=1;y>>=1;n>>=1;
}
reverse(dx.begin(), dx.end());
reverse(dy.begin(), dy.end());
reverse(dn.begin(), dn.end());
memset(sum,-1,sizeof(sum));
memset(cnt,-1,sizeof(cnt));
sum[0][1][1][1]=0;
cnt[0][1][1][1]=1;
rep(p,0,N-1) {
rep(i,0,2) rep(j,0,2) rep(k,0,2) if(~cnt[p][i][j][k]) {
rep(x,0,2) {
if(i&&(x>dx[p+1])) continue;
rep(y,0,2) {
if(j&&(y>dy[p+1])) continue;
int z=(x^y);
if(k&&(z>dn[p+1])) continue;
ll &_ = cnt[p+1][i&&(x==dx[p+1])][j&&(y==dy[p+1])][k&&(z==dn[p+1])];
ll &c = sum[p+1][i&&(x==dx[p+1])][j&&(y==dy[p+1])][k&&(z==dn[p+1])];
if(_==-1) _=0;
if(c==-1) c=0;
upd(_, cnt[p][i][j][k]);
upd(c, sum[p][i][j][k]);
upd(c, z*(1ll<<(N-1-p-1))*cnt[p][i][j][k]);
}
}
}
}
ll a1=0, a2=0;
rep(i,0,2) rep(j,0,2) rep(k,0,2) if(~cnt[N-1][i][j][k]) {
upd(a1, cnt[N-1][i][j][k]);
upd(a2, sum[N-1][i][j][k]);
}
return (a1+a2)%mod;
} int main() {
int T;scanf("%d",&T);
while(T--) {
int a,b,c,d,n;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&n);
--a;--b;--c;--d;--n;
ll ans=0;
upd(ans,solve(c,d,n));
upd(ans,solve(a-1,b-1,n));
upd(ans,-solve(a-1,d,n));
upd(ans,-solve(c,b-1,n));
printf("%lld\n",ans);
}
return 0;
}

codeforces 809C Find a car的更多相关文章

  1. Codeforces 809C - Find a car(找性质)

    Codeforces 题目传送门 & 洛谷题目传送门 首先拿到这类题第一步肯定要分析题目给出的矩阵有什么性质.稍微打个表即可发现题目要求的矩形是一个分形.形式化地说,该矩形可以通过以下方式生成 ...

  2. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  3. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  4. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  5. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  6. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  7. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  8. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  9. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. POJ 1577 Falling Leaves 二叉搜索树

    HDU 3791 Falling Leaves 二叉搜索树  Figure 1Figure 1 shows a graphical representation of a binary tree of ...

  2. 利用OC对象的消息重定向forwardingTargetForSelector方法构建高扩展性的滤镜功能

    在OC中,当像一个对象发送消息,而对象找到消息后,从它的类方法列表,父类方法列表,一直找到根类方法列表都没有找到与这个选择子对应的函数指针.那么这个对象就会触发消息转发机制. OC对象的继承链和isa ...

  3. 每天一道leetcode234-回文链表

    考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰” 前言 2018. ...

  4. 基于 Annotation 的 Spring AOP 权限验证方法的实现

    1. 配置 applicationContext 在 Spring 中支持 AOP 的配置非常的简单,只需要在 Spring 配置文件 applicationContext.xml 中添加: < ...

  5. HTML5--(1)兼容前缀+结构性标签+语义化标签

    一.兼容前缀+兼容写法 兼容前缀 1.HTML5有部分类容兼容到IE9,IE8及以下完全不兼容的内容不再考虑. 2.部分内容需要加兼容前缀 a)     -webkit- 兼容谷歌 b)     -m ...

  6. centOS 7镜像文件下载

  7. ssm项目快速搭建(注解)

    dao层配置 dao层配置注意事项: 1.Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同 2.Mapper.xml 接口方法名和 Mapper.xml 中定义的 ...

  8. Thymeleaf学习记录(8)--表达式基本对象

    基础对象 #ctx:上下文对象 /* * ====================================================================== * See ja ...

  9. C#3.0匿名类和Lanmda表达式

    1.初始化器:className variableName = new className(property1=value1…); 2.var可以声明一个没有类型的变量,根据赋值的不同改变数据类型 3 ...

  10. windows操作系统用命令提示符查看占用端口号的进程

    在开发中有时我们需要确定哪个占用了8080端口,在windows命令行窗口下执行: 命令执行后打印出来的结果如下所示: