搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表
4513: [Sdoi2016]储能表
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 395 Solved: 213
[Submit][Status][Discuss]
Description
有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号。每个格子都储存着能量。最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量。所以,整个表格储存的总能量是,


Input
第一行一个整数 T,表示数据组数。接下来 T 行,每行四个整数 n、m、k、p。
Output
共 T 行,每行一个数,表示总能量对 p 取模后的结果
Sample Input
2 2 0 100
3 3 0 100
3 3 1 100
Sample Output
12
6
HINT
T=5000,n≤10^18,m≤10^18,k≤10^18,p≤10^9
找规律的方法过的。
思路在程序中很清楚,用四分树搜索。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL; LL n,m,k,mod,len;
LL Max(LL a,LL b){
return a>b?a:b;
} LL Mul(LL a,LL b){
LL ret=;
a%=mod;b%=mod;
while(a){
if(a&)ret=(ret+b)%mod;
a>>=;b<<=;
}
return ret;
} LL Calc1(LL h,LL tot){
LL t=h+tot-,ret=;
h=Max(,h-k);t-=k;
if(h>t)return ;
if((h+t)&) ret=Mul(Mul((h+t),(t-h+)/),tot);
else ret=Mul(Mul((t-h+),((h+t)/)),tot);
return ret;
} LL Calc2(LL h,LL t,LL lb){
LL ret=;
h=Max(1ll,h-k);t-=k;
if(h>t)return ;
if((h+t)&) ret=Mul(Mul((h+t),(t-h+)/),lb);
else ret=Mul(Mul((t-h+),((h+t)/)),lb);
return ret;
} LL Solve(LL qa,LL qb,LL x1,LL y1,LL x2,LL y2,LL l){
if(x1<y1){swap(qa,qb);swap(x1,y1);swap(x2,y2);}
if(qa>=x2&&qb>=y2){return Calc1(x1^y1,l);}
else if(qa>=x2){return Calc2(x1^y1,(x1^y1)+l-,qb-y1);}
else if(qb>=y2){return Calc2(x1^y1,(x1^y1)+l-,qa-x1);}
LL mx=(x1+x2)>>,my=(y1+y2)>>,ret=;
if(x1<qa&&y1<qb)ret=(ret+Solve(qa,qb,x1,y1,mx,my,l>>))%mod;
if(mx<qa&&y1<qb)ret=(ret+Solve(qa,qb,mx,y1,x2,my,l>>))%mod;
if(x1<qa&&my<qb)ret=(ret+Solve(qa,qb,x1,my,mx,y2,l>>))%mod;
if(mx<qa&&my<qb)ret=(ret+Solve(qa,qb,mx,my,x2,y2,l>>))%mod;
return ret;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld%lld",&n,&m,&k,&mod);
if(n<m)swap(n,m);len=;
while(len<n)len<<=;
printf("%lld\n",Solve(n,m,,,len,len,len));
}
return ;
}
搜索(四分树):BZOJ 4513 [SDOI2016 Round1] 储能表的更多相关文章
- 「SDOI2016」储能表(数位dp)
「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...
- BZOJ 4513: [Sdoi2016]储能表 [数位DP !]
4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...
- BZOJ.4513.[SDOI2016]储能表(数位DP)
BZOJ 洛谷 切了一道简单的数位DP,终于有些没白做题的感觉了...(然而mjt更强没做过这类的题也切了orz) 看部分分,如果\(k=0\),就是求\(\sum_{i=0}^n\sum_{j=0} ...
- bzoj 4513 [Sdoi2016]储能表
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4513 题解 要求的式子 用数位dp的方法去做 我们把式子拆开 变成 $\sum_{i=0}^ ...
- loj2030 「SDOI2016」储能表
ref ref 一个点就是一个数对 \((x,y)\). 记状态 \(f[i][1/0][1/0][1/0]\) 和 \(g[i][1/0][1/0][1/0]\),其中三个 \(1/0\) 取值分别 ...
- 4513: [Sdoi2016]储能表
4513: [Sdoi2016]储能表 链接 分析: 数位dp. 横坐标和纵坐标一起数位dp,分别记录当前横纵坐标中这一位是否受n或m的限制,在记录一维表示当前是否已经大于k了. 然后需要两个数组记录 ...
- BZOJ4513 SDOI2016 储能表 记忆化搜索(动态规划)
题意: 题面中文,不予翻译:SDOI2016储能表 分析: 据说有大爷用一些奇怪的方法切掉了这道题%%%%% 这里用的是大众方法——动态规划. 其实这是一道类似于二进制数位dp的动态规划题,(但是实际 ...
- UVa 297 (四分树 递归) Quadtrees
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...
- UVA - 297 Quadtrees (四分树)
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...
随机推荐
- SQLCLR
hsrzyn SQLCLR 什么是SQLCLR SQL CLR (SQL Common Language Runtime) 是自 SQL Server 2005 才出现的新功能,它将.NET Fr ...
- LDAP7卸载
3 Uninstalling Directory Server Enterprise Edition This chapter provides instructions for uninstalli ...
- Iterator<Entry<String,String>> iter=map.entrySet().iterator(); 是什么意思
//获得map的迭代器,用作遍历map中的每一个键值对Iterator是迭代器,map之前应该定义过,姑且认为是HashMap.<Entry<String,String>>表示 ...
- JAVA package与import机制
JAVA package与import机制 http://files.cnblogs.com/files/misybing/JAVA-package-and-import.pdf import org ...
- WCF,WebAPI,WCFREST和WebService的区别
Web ServiceIt is based on SOAP and return data in XML form.It support only HTTP protocol.It is not o ...
- angularjs-ngModel传值问题
js NiDialog.open({ windowClass: '', backdrop: 'static', keyboard: false, templateUrl: '/static/tpl/a ...
- PrintWriter 和 BufferedWriter 写入文件.
Ref: should I use PrintWriter to wrap BufferedWriter? The main reason for using PrintWriter is the w ...
- 菜鸟学开店—自带U盘的打印机
本文旨在提供最简单.便宜.有效的解决方案,解决普通用户最困扰的问题.今天提供普通用户一个低价的小票打印机驱动安装解决方案 相信很多用户都碰到过这种情况,电脑的重装了系统,打印机的驱动没有备份,要用打印 ...
- php中调用其他系统http接口的方法说明
使用函数: file_get_contents($url); 传入接口url及其参数:如 $url="http://192.168.1.1/test.jsp?id=1&type=2& ...
- 浅析CSS中的haslayout
作为一名web开发人员,最大的希望不是自己的水平有多高,而是希望浏览器厂家能够统一标准,相信任何一个只要是接触过web程序开发的人员都有那样的感受,就是浏览器之间的兼容性问题总是让我们的工作平添诸多的 ...