hdu6156
hdu6156
题意
求 \([2, 36]\) 进制下,给定区间内的数是回文数的个数。每存在一个回文数,答案加上该回文数的进制。
分析
10进制下回文数是 数位DP 很常见的问题,这道题只需要把在转化数字的时候转化成对应的进制即可。
多开一维数组表示某个进制下的方案数,\(dp\) 数组只需要一次初始化。
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[40][60][60]; // 进制,起始位置,长度 (起始位置就是不为 0 的第一个数字)
int digit[60];
int num[60];
ll dfs(int jz, int st, int len, int limit) {
if(!len) return 1;
if(!limit && dp[jz][st][len] != -1)
return dp[jz][st][len];
ll res = 0;
int mx = limit ? digit[len] : (jz - 1);
for(int i = 0; i <= mx; i++) {
if(st == len && i == 0)
res += dfs(jz, st - 1, len - 1, limit && i == mx);
else {
num[len] = i;
if((st & 1) == 1) {
int mid = ((st + 1) >> 1);
if(len >= mid) {
res += dfs(jz, st, len - 1, limit && i == mx);
} else if(len < mid) {
if(num[mid * 2 - len] == i) {
res += dfs(jz, st, len - 1, limit && i == mx);
}
}
} else {
int mid = (st >> 1) + 1;
if(len >= mid) {
res += dfs(jz, st, len - 1, limit && i == mx);
} else {
if(num[st + 1 - len] == i) {
res += dfs(jz, st, len - 1, limit && i == mx);
}
}
}
}
}
if(!limit) dp[jz][st][len] = res;
return res;
}
ll f(int jz, int n) { // jz进制下小于等于 n 的回文数字的个数
int len = 0;
while(n) {
digit[++len] = n % jz;
n /= jz;
}
ll res = dfs(jz, len, len, 1);
return res;
}
int main() {
memset(dp, -1, sizeof dp);
int T;
scanf("%d", &T);
int Case = 0;
while(T--) {
int jz1, jz2;
int n, m;
scanf("%d%d%d%d", &n, &m, &jz1, &jz2);
ll ans = 0;
for(int i = jz1; i <= jz2; i++) {
ll num = f(i, m) - f(i, n - 1);
ans = ans + (1LL * num * i + (m - n + 1 - num));
}
printf("Case #%d: %lld\n", ++Case, ans);
}
return 0;
}
hdu6156的更多相关文章
- HDU-6156 Palindrome Function(数位DP)
一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...
随机推荐
- Walk 解题报告
Walk 题目描述 给定一棵 \(n\) 个节点的树,每条边的长度为 \(1\),同时有一个权值\(w\).定义一条路径的权值为路径上所有边的权值的最大公约数.现在对于任意 \(i \in [1,n] ...
- Faster R-CNN教程
Faster R-CNN教程 最后更新日期:2016年4月29日 本教程主要基于python版本的faster R-CNN,因为python layer的使用,这个版本会比matlab的版本速度慢10 ...
- LA2995 Image is everything
蓝书P12 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm ...
- 解析json方式之net.sf.json
前面转载了json解析的技术:fastjson,今天说下另外一种技术. 下载地址 本次使用版本:http://sourceforge.net/projects/json-lib/files/json- ...
- ansible 批量修改root密码
[root@sz_fy_virt_encrypt_33_239 fetch]# cat /opt/passwd.yml - hosts: web vars: path: /home/opsadmin ...
- CMDB资产管理系统开发【day26】:02-数据写入待存区
一.资产自动回报数据及个更新流程图 二.表结构注释(NewAssetApprovalZone) class NewAssetApprovalZone(models.Model): "&quo ...
- JS知识总结
1.javascript继承机制 原型继承,访问对象属性时,如果对象内部有就返回,找不到就会从对象原型指向的对象原型中查找,一层一层的查找,直到最顶层的对象原型还找不到,就返回undefined. 2 ...
- Django-models,继承AbstractUser类
1.UserInfo类继承了Django模型自带的User类,需要导入AbstractUser 2.然后在settings.py中配置
- Linux上使用程序相对路径访问文件【转】
转自:http://blog.csdn.net/yinxusen/article/details/7444249 今天一个朋友问我这个问题,说为什么在Windows上跑得很好的应用程序,移植到Linu ...
- Linux上Core Dump文件的形成和分析
原文: http://baidutech.blog.51cto.com/4114344/904419 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而 ...