题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4321

-------------------------------------------------------------------------------

虽然有更优美的做法 不过数据范围还是可以数位$DP$的

即把模型转化为 在区间内 $mod\ a  = b\ mod\ a$ 的数所含$1$的个数之和

四维的数组分别记录 枚举到第$x$位 是否达到上限 $mod\ a$ 的余数 当前位是否为$1$ 这些状态

然后统计在这些状态下的数的个数$F$ 以及在这些状态下的数的总贡献 $G$

转移的话 $F$比较简单

$G$的话先把当前位之后的$G$全部转移上去 再把当前位根据$F$的大小算好贡献

之后就是一个记忆化搜索了

 #include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
long long f[][][][], g[][][][], two[];
int ti[][][][];
bool num[];
long long a, b, n, ans;
int t, len, tt;
void work(long long x)
{
memset(num, , sizeof num);
len = ;
while(x)
{
num[++len] = x & ;
x >>= ;
}
two[] = % a;
for(int i = ; i < len; ++i)
two[i] = two[i - ] * % a;
}
long long dfs(int x, bool top, int r, bool one)
{
if(ti[x][top][r][one] == tt)
return f[x][top][r][one];
ti[x][top][r][one] = tt;
if(x == )
{
g[x][top][r][one] = (one && (r == b % a));
return f[x][top][r][one] = (r == b % a);
}
f[x][top][r][one] = g[x][top][r][one] = ;
if(top)
{
if(num[x])
{
f[x][top][r][one] += dfs(x - , , (two[x - ] + r) % a, );
g[x][top][r][one] += g[x - ][][(two[x - ] + r) % a][];
f[x][top][r][one] += dfs(x - , , r, );
g[x][top][r][one] += g[x - ][][r][];
}
else
{
f[x][top][r][one] += dfs(x - , , r, );
g[x][top][r][one] += g[x - ][][r][];
}
}
else
{
f[x][top][r][one] += dfs(x - , , (two[x - ] + r) % a, );
g[x][top][r][one] += g[x - ][][(two[x - ] + r) % a][];
f[x][top][r][one] += dfs(x - , , r, );
g[x][top][r][one] += g[x - ][][r][];
}
g[x][top][r][one] += one * f[x][top][r][one];
return f[x][top][r][one];
}
int main()
{
scanf("%d", &t);
for(int ca = ; ca <= t; ++ca)
{
scanf("%lld%lld%lld", &a, &b, &n);
work(b);
++tt;
dfs(len + , , , );
ans = -g[len + ][][][];
work(b + n * a);
++tt;
dfs(len + , , , );
ans += g[len + ][][][];
printf("Case #%d: %lld\n", ca, ans);
}
return ;
}

最新文章

  1. C# socket send方法
  2. highcharts
  3. PyQt写的五子棋
  4. Understanding, Operating and Monitoring Apache Kafka
  5. 产品Backlog
  6. Android的ADT内容助手快捷方式设置
  7. 关于 ArtifactTransferException: Failure to transfer
  8. html中#include file的使用方法
  9. Jquery Mobile下设置radio控件选中
  10. JQUERY1.9学习笔记 之基本过滤器(六) 页眉选择器
  11. 【Trie】【HDU1247】【Hat’s Wordsfd2】
  12. 调色板QPalette类用法详解(附实例、源码)(很清楚:窗口背景色 前景色 按钮的颜色 按钮文本的颜色 )
  13. Javascript 中的非空判断 undefined,null, NaN的区别
  14. 工作中对数组的一些处理,整理(结合underscore.js)
  15. [S]SQL SERVER数据库维护与重建索引
  16. 有了Openvswitch和Docker,终于可以做《TCP/IP详解》的实验了!
  17. js打印小结
  18. 博主新建Linux学习交流群,欢迎广大大神入驻~
  19. (二)通过fork编写一个简单的并发服务器
  20. JSTL 和 EL

热门文章

  1. vue 路由嵌套 及 router-view vue-router --》children
  2. APM全链路监控--日志收集篇
  3. git ssh key配置&amp;解决git每次输入密码
  4. Oracle数据库控制台常用命令
  5. 初学css list-style属性
  6. SCAU 2015 GDCPC team_training1
  7. bzoj3188 [Coci 2011]Upit(分块)
  8. Untiy3D学习笔记记录
  9. 手写符合Promise/A+规范的Promise
  10. 211-基于FMC的ADC-DAC子卡