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