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. SpringCloud - RestTemplate 的三种使用方式

    1. 直接使用 RestTemplate restTemplate = new RestTemplate(); String result = restTemplate.getForObject(&q ...

  2. 第十六章、例行性工作排程 (crontab)

    1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作 2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式 ...

  3. Memcached分布式算法详解--转

    http://xiexiejiao.cn/java/memcached-consistent-hashing.html Memcached分布式算法在网上一搜可以找到一大片了,不过对于Memcache ...

  4. Mozilla新特性只支持https网站,再次推动SSL证书普及

    Mozilla的官方博客2015.4.30正式宣布了淘汰HTTP的方案. 其中包括:设定一个日期,所有的新特性将只提供给HTTPS网站:HTTP网站将逐步被禁止访问浏览器功能,尤其是那些与用户安全和隐 ...

  5. 关于PHP数据库mysql的一些案例

    案例1:查询select 使用php连接数据库class9, 获取数据库的表student中的信息, 然后输出到页面上(用表格套住) <?php header("Content-typ ...

  6. rust by example 2

    本来这篇准备明天在写的,但正好今天的Release没出问题,就接着写吧 rust里的原生类型: 有符号整数: i8, i16, i32, i64和isize(指针大小) 无符号整数:u8, u16,  ...

  7. 使用重绘项美化WinForm中的控件

    如果你觉得项目中的ComboBox.ListBox或其它的Winforms控件不能满足你的显示要求,包括窗体在内很多控件都支持重绘修改显示样式.下面的示例完成对ComBox数据项的重绘,希望能起到抛砖 ...

  8. 六、阻塞队列LinkedBlockQueue

    一.简介 Java提供了FIFO先进先出的阻塞队列实现,这其实是一种生产者消费者理念,可以通过阻塞队列将生产者和消费者进行解耦合. LinkedBlockQueue是一种无界队列,但事实上它只是队列可 ...

  9. 关于一次美团java程序员招聘面试的经历

    美团一面: 中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么答好的. 1.了解SOA,微服务吗? 2.分布式系统如何负载均衡?如何确定访问的资源在哪个服务器上? 一.轮询.二.随机. ...

  10. javaweb浏览器url上项目名称的更改

    如何改变上面url项目名称地址,如把04去掉改成teachershare 如下图:在项目设置中设置web context-root属性,将04去掉. 就可以用这个登录了. 要注意的是如果之前已经部署在 ...