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;
}

最新文章

  1. $.ajax请求返回数据中status为200,回调的却是error?
  2. Nginx泛解析的匹配域名绑定到子目录配置
  3. java.outOfMemory
  4. Ada语言基础
  5. Java中反射的三种常用方式
  6. 划分分区GPT11
  7. google地图marker文字label添加js lib
  8. System.Web.HttpException: 无法向会话状态服务器发出会话状态请求
  9. [Cacti] memcache安装执行、cacti监控memcache实战
  10. HDU 5795 A Simple Nim(SG打表找规律)
  11. Redis 11种Web应用场景举例
  12. 神经网络结构在命名实体识别(NER)中的应用
  13. 2015年ACM长春区域赛比赛感悟
  14. SQL查询和删除重复字段的内容
  15. 【原创】大叔问题定位分享(21)spark执行insert overwrite非常慢,比hive还要慢
  16. canvas.drawImage()方法详解
  17. PON
  18. VMware安装Linux并配置网络通信
  19. POJ 3692 Kindergarten(最大团问题)
  20. java maven项目迁移时缺失jar包 或者 maven jar包缺失时的解决方案

热门文章

  1. [CF1041E]Tree Reconstruction
  2. fzu 2246(ac 自动机)
  3. win10 update orchestratorservere禁用
  4. PHP 5.4语法改进与弃用特性
  5. git使用笔记(九)操作原理
  6. POJ3259:Wormholes(spfa判负环)
  7. MVC前台获取ViewData的数组中的值
  8. 用户线程 (User Thread)、守护线程 (Daemon Thread)
  9. GDOI2015的某道题目
  10. bzoj 3190 维护栈