HDU 4321 Arcane Numbers 2
题目链接: 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 ;
}
HDU 4321 Arcane Numbers 2的更多相关文章
- HDU 4320 Arcane Numbers 1 (数论)
A - Arcane Numbers 1 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- HDU 4320 Arcane Numbers 1(质因子包含)
http://acm.hdu.edu.cn/showproblem.php?pid=4320 题意: 给出A,B,判断在A进制下的有限小数能否转换成B进制下的有限小数. 思路: 这位博主讲得挺不错的h ...
- HDU 4320 Arcane Numbers 1 (质因子分解)
题目:传送门. 题意:将一个A进制下的有限小数转化为B进制看是否仍为有限小数. 题解:一个A进制的小数可以下次 左移动n位变成A进制整数然后再将其转化为B进制即可 即B^m/A^n要整除,因此A的质因 ...
- 2012 #3 Arcane Numbers
Arcane Numbers 1 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- 【数位DP】 HDU 4722 Good Numbers
原题直通车: HDU 4722 Good Numbers 题意: 求区间[a,b]中各位数和mod 10==0的个数. 代码: #include<iostream> #include& ...
- HDU 3117 Fibonacci Numbers(围绕四个租赁斐波那契,通过计++乘坐高速动力矩阵)
HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵高速幂) ACM 题目地址:HDU 3117 Fibonacci Numbers 题意: 求第n个斐波那契数的 ...
- HDOJ(HDU).1058 Humble Numbers (DP)
HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...
- Arcane Numbers 1
Vance and Shackler like playing games. One day, they are playing a game called "arcane numbers& ...
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
随机推荐
- 分布式 vs 集群 主从 vs 集群
理解 分布式 一个业务拆分成多个子业务,部署在不同的服务器上 集群 同一个业务部署在多个服务器上 更新 主从 服务器之间更新是异步的,从服务器可能和主服务器不一致 集群 更新是同步的,数据节点 ...
- Java第三周总结&实验报告(1)
总结:不知不觉,到了第三周,回顾这一周,我更加深入了解了main方法,除此之外,学习了两个关键字,一个this,一个static,this在强调属性时,只能放在句首且不能循环调用,static声明用于 ...
- [2019杭电多校第七场][hdu6655]Just Repeat
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6655 题意是说两个人都有一些带有颜色的牌,两人轮流出牌,但是不能出对面出过的颜色的牌,最后谁不能出牌谁 ...
- 10 个常用的 Linux 命令?
pwd 显示工作路径ls 查看目录中的文件 cd /home 进入 '/ home' 目录'cd .. 返回上一级目录cd ../.. 返回上两级目录mkdir dir1 创建一个叫做 'dir1' ...
- Python学习第四十一天函数装饰器传参数的用法
在不改变函数的结构的基础,我们给函数加新的功能,用是函数装饰器,如果要给函数传递参数,那么应该怎么做呢 @timerdef test2(name,age): time.sleep(3) print(' ...
- 【数据库运维】数据库(server)的时区设置及世界主要地区的时区
[时区设置不当会有什么问题] 当进行海外项目运维的时候,常常会遇到时区设置的问题.假设时区设置不当 或者 同样项目的server之间的时区不一致,都会有导致项目的数据异常的风险. 假设数据表的字段使用 ...
- C# http post请求帮助类
using System; using System.Collections.Specialized; using System.IO; using System.Net; using System. ...
- VUE组件嵌套
vue中组件嵌套烦分为两种,分别是全局注册组件和局部注册组件 基本步骤: 1.在components 下创建一个新的.vue结尾的文件,文件首字母最好是大写,基于规范复制代码 2.分别写出结构层< ...
- ajaxSubmit 实现图片上传 SSM maven
文件上传依赖: <!-- 文件上传组件 --> <dependency> <groupId>commons-fileupload</groupId> & ...
- Python Paramiko模块使用
1 执行远程命令 #!/usr/bin/python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_polic ...