codeforces 809C Find a car
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的更多相关文章
- Codeforces 809C - Find a car(找性质)
Codeforces 题目传送门 & 洛谷题目传送门 首先拿到这类题第一步肯定要分析题目给出的矩阵有什么性质.稍微打个表即可发现题目要求的矩形是一个分形.形式化地说,该矩形可以通过以下方式生成 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
随机推荐
- 快捷键 -- windows
win+数字 : 打开任务栏第n个图标 Win+D :快速显示桌面 Win+R :快速运行打开软件 例如 cmd services,msc Win+E:打开资源管理器 Win+L:快速锁定计算机 ...
- 低版本的linux系统装samba服务器
这里所用系统fedora14,安装samba服务器.我是壮壮熊. 由于工作原因,需要在feaord14上装samba服务器. 问题描述:用yum -y install samba安装samba后,需要 ...
- [MVC]多文件、超大文件上传
话不多说,上代码. <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script> & ...
- NodeJS,MongoDB,Vue,VSCode 集成学习
NodeJS,MongoDB,Vue,VSCode 集成学习 开源项目地址:http://www.mangdot.com
- Windows窗体技术及基础控件
创建winform程序 Visual studio是一套完整的开发工具集 RAD 工具(rapid application development) 创建用户界面时,把控件从工具箱拖放到窗体上,把它们 ...
- ubuntu16.04 安装 nginx 服务器
在线安装 apt-get install nginx 说明 启动程序文件在/usr/sbin/nginx 日志放在了/var/log/nginx中,分别是access.log和error.log 并已 ...
- 14、IO (字节流、字符流)
输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 ...
- 撩课-Python-每天5道面试题-第7天
一. 函数的返回值的概念,语法以及注意事项? 场景 当我们通过某个函数, 处理好数据之后, 想要拿到处理的结果 语法 def 函数(): 函数体 return 数据 注意事项 3.1 return 后 ...
- 【SSH网上商城项目实战22】获取银行图标以及支付页面的显示
转自: https://blog.csdn.net/eson_15/article/details/51452243 从上一节的小demo中我们搞清楚了如何跟易宝对接以及易宝的支付流程.这一节 ...
- Linux下ipv6配置系列
Linux下ipv6配置系列一:如何配置Linux系统ipv6环境 Linux下ipv6配置系列二:如何为Nginx添加ipv6模块 Linux下ipv6配置系列三:如何为Nginx配置IPv6端口监 ...