Description

有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号。每个格子都储存着能量。最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量。所以,整个表格储存的总能量是,

随着时间的推移,格子中的能量会渐渐减少。一个时间单位,每个格子中的能量都会减少 1。显然,一个格子的能量减少到 0 之后就不会再减少了。
也就是说,k 个时间单位后,整个表格储存的总能量是,
给出一个表格,求 k 个时间单位后它储存的总能量。
由于总能量可能较大,输出时对 p 取模。

Input

第一行一个整数 T,表示数据组数。接下来 T 行,每行四个整数 n、m、k、p。

Output

共 T 行,每行一个数,表示总能量对 p 取模后的结果

Sample Input

3
2 2 0 100
3 3 0 100
3 3 1 100

Sample Output

2
12
6

HINT

T=5000,n≤10^18,m≤10^18,k≤10^18,p≤10^9

令$f[i][a][b][c]和g[i][a][b][c]$表示第i位,表示x后i-1位是否等于n,y后i-1位是否等于m,x^y后i-1位是否等于k的异或和以及方案数

如果a==1,且第i位大于n的第i位,那么超过上界,舍去

b同理

c比较特殊,如果c==1,如果第i为小于k的第i位,那么异或结果必定小于k,答案为0,舍去

$g[i][a][b][c]+=g[i-1][aa][bb][cc]$

$f[i][a][b][c]+=f[i-1][aa][bb][cc]+[第i位异或值为1]*2^{i}*g[i-1][aa][bb][cc]$

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 typedef long long lol;
 8 lol f[81][2][2][2],g[81][2][2][2],n,m,Mod,k,pw[61],t1,t2,S,t3;
 9 void dfs(lol x,int a,int b,int c)
10 {lol i,j;
11   if (f[x][a][b][c]!=-1||g[x][a][b][c]!=-1) return;
12   g[x][a][b][c]=f[x][a][b][c]=0;
13   if (x==0)
14     {
15       f[0][a][b][c]=0;
16       g[0][a][b][c]=1;
17       return;
18     }
19   for (i=0;i<=1;i++)
20     {
21       int xx=(n>>x-1)&1;
22       int yy=(m>>x-1)&1;
23       int zz=(k>>x-1)&1;
24       if (a&&i>xx) continue;
25       for (j=0;j<=1;j++)
26     {
27       if (b&&j>yy) continue;
28       lol p=i^j;
29       if (c&&p<zz) continue;
30       int aa=a&(xx==i);
31       int bb=b&(yy==j);
32       int cc=c&(zz==p);
33       dfs(x-1,aa,bb,cc);
34       g[x][a][b][c]=(g[x][a][b][c]+g[x-1][aa][bb][cc])%Mod;
35       f[x][a][b][c]=((f[x][a][b][c]+g[x-1][aa][bb][cc]*p*(pw[x-1]%Mod)%Mod)%Mod+f[x-1][aa][bb][cc])%Mod;
36     }
37     }
38 }
39 lol solve()
40 {
41   memset(f,-1,sizeof(f));
42   memset(g,-1,sizeof(g));
43   t1=0;S=n;
44   if (n==0&&m==0) return 0;
45   while (S)
46     {
47       S>>=1;
48       t1++;
49     }
50   t2=0;S=m;
51   while (S)
52     {
53       S>>=1;
54       t2++;
55     }
56   t3=0;S=k;
57   while (S)
58     {
59       S>>=1;
60       t3++;
61     }
62   t1=max(t1,max(t2,t3));
63   dfs(t1,1,1,1);
64   return f[t1][1][1][1]-(k%Mod)*g[t1][1][1][1]%Mod;
65 }
66 int main()
67 {int T,i;
68   cin>>T;
69   pw[0]=1;
70   for (i=1;i<=60;i++)
71     pw[i]=pw[i-1]*2;
72   while (T--)
73     {
74       cin>>n>>m>>k>>Mod;
75       n--;m--;
76       printf("%lld\n",(solve()+Mod)%Mod);
77     }
78 }

转载于:https://www.cnblogs.com/Y-E-T-I/p/8577883.html

[SDOI2016]储能表相关推荐

  1. bzoj4513 [Sdoi2016]储能表 dp

    这种数位dp第一次见.. 其实应该是利用位运算相互独立来避免后效性 一般的数位dp只有一个范围 这个题有三个范围.. 由于数位和整个数的大小没直接关系,所以就需要用状态记录 首先不合法的一定不转移,对 ...

  2. bzoj千题计划277:bzoj4513: [Sdoi2016]储能表

    http://www.lydsy.com/JudgeOnline/problem.php?id=4513 f[i][0/1][0/1][0/1] 从高到低第i位,是否卡n的上限,是否卡m的上限,是否卡 ...

  3. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  4. 省选之前的未完成的计划(截至到省选)

    PLAN OF THE COMING HEOI good problems: -bzoj4823:[Cqoi2017]老C的方块 [*] -bzoj3171:[Tjoi2013]循环格 [*] -bz ...

  5. LibreOJ 题解汇总

    目录 #1. A + B Problem #2. Hello, World! #3. Copycat #4. Quine #7. Input Test #100. 矩阵乘法 #101. 最大流 #10 ...

  6. [总结]2019年9月 OI学习/刷题记录

    从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...

  7. DJSF1352RN直流电能表在某新加坡光伏储能系统中的应用

    安科瑞 华楠 [摘要]高压输电时交流电比直流电更方便,更经济.但在部分应用场景中,直流电直接给直流负载供电的应用,可以使电路设计更简单,效率更高.目前直流配电在光伏+储能系统中,可以通过光伏或电池直接 ...

  8. [SDOI2016] 生成魔咒(后缀数组SA + st表 + set)动态不同子串个数

    problem luogu-P4070 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1,21,21,2 拼凑起来形成一个魔咒串 [1,2][1,2][1,2]. 一个魔咒串 ...

  9. 新能源储能仪表推荐-ACR10R-D16TE4 防逆流仪表通讯接线及Modbus-RTU协议通讯表说明

    1. 通讯接线 该仪表提供异步半双工 RS485 通讯接口,采用 MODBUS-RTU 协议,各种数据信息均可在通讯线路上传送.理论上在一条线路上可以同时连接多达 128 个仪表,每个仪表均可设定其通 ...

最新文章

  1. shell for循环命令行_精心汇总的24道shell脚本面试题
  2. C#教程3:基本语言结构
  3. lvm 扩展根目录_Linux下lvm在线扩容步骤
  4. 搜索引擎web spam类型及防治策略(version 0.9)
  5. SAP UI5 的 兼容性规则 Compatibility Rules
  6. cesium polygon 悬浮在半空中
  7. SQL Server查询锁等待
  8. mysql扩展中如何处理结果集_请写出PHP处理结果集的5个函数(使用mysql扩展)_学小易找答案...
  9. ios开发之--UITableView中的visibleCells的用法
  10. chrome charset使用_SourceMap-使用教程
  11. sqlldr mysql_Oracle中的SQLLDR工具使用
  12. 微软雅黑字体,百度云下载
  13. 松翰单片机之外设的使用
  14. 壳聚糖/纳米金水凝胶/纳米木质素/掺杂二硫化钼/微米级Ag2O2掺杂壳聚糖水凝胶的制备研究
  15. GitHub贡献统计
  16. 2020年12月中国编程语言排行榜 - Java地位岌岌可危
  17. 定位position-relative
  18. 报错:error: not found: value spark val ratings = spark.sparkContext.(解决方案)
  19. 【论文笔记】EagerMOT:3D Multi-Object Tracking via Sensor Fusion
  20. 【风马一族_Android】 图能

热门文章

  1. pvrect r语言 聚类_R语言常用统计方法包+机器学习包(名称、简介)
  2. 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
  3. java存钱_用Java编写银行存钱取钱
  4. python 通过pip安装库 pycharm里面使用第三方库
  5. 编写有效用例电子版_软件测试人员必须编写代码吗?
  6. java dispatchevent_java事件处理机制
  7. 只在当前页面生效的css样式,修改页面中的一个样式 仅在当前页面生效
  8. linux redis 启动用户,redis 进程使用root用户启动 -- 整改方案
  9. requests由于系统缓冲区空间不足_系统C盘满了空间不足的扩容?
  10. lvds接口屏线安装图解_五分钟让你学会液晶拼接屏安装方法