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的更多相关文章

  1. HDU-6156 Palindrome Function(数位DP)

    一.题目 二.思路 1.这是很明显的数位DP: 2.和以往数位DP不同的是,这里带了个进制进来,而以往做是纯十进制下或者纯二进制下做操作.但是,不管多少进制,原理都是一样的: 3.这里有个小坑,题目中 ...

随机推荐

  1. 【题解】NOI2015寿司晚宴

    想好久啊+不敢写啊……但果然人还是应当勇敢自信,只有坚定地去尝试,才会知道最后的结果.1A真的太开心啦,不过好像我的做法还是比较复杂的样子……理解起来应该算是比较容易好懂的类型,大家可以参考一下思路~ ...

  2. [洛谷P4722]【模板】最大流 加强版 / 预流推进

    会$TLE$... C++ Code:(HLPP) #pragma GCC optimize(3) #pragma GCC optimize("unroll-loops") #in ...

  3. BEGIN TRAN;

    USE master Create Database TestDb on Primary ( name='TestDb_data', filename='G:\TempData\Db\TestDb_d ...

  4. 防恶意解析,禁止用IP访问网站的Apache设置

    一般来说,网站可以用域名和IP来访问.你的网站可以通过IP直接访问,本来这没什么问题,但是会有些隐患: 由于搜索引擎也会收录你的IP地址的页面,所以同一个页面搜索引擎会重复收录,造成页面的权重不如单个 ...

  5. Codeforces Round #526 (Div. 2) C. The Fair Nut and String

    C. The Fair Nut and String 题目链接:https://codeforces.com/contest/1084/problem/C 题意: 给出一个字符串,找出都为a的子序列( ...

  6. codeforces902B. Coloring a Tree

    B. Coloring a Tree 题目链接: https://codeforces.com/contest/902/problem/B 题意:给你一颗树,原先是没有颜色的,需要你给树填色成指定的样 ...

  7. 几种不同的json格式解析

    转连接: http://blog.csdn.net/whx405831799/article/details/42171191 内容很好 给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分 ...

  8. linux crontab执行shell脚本中包含相对路径的问题

    实例一 test.sh文件 echo `date`>test.log 配置crontab 设置 */1 * * * * sh /data/test.sh 在/data/目录下,未找到test.l ...

  9. 51Nod-1586-约数和

    #include <cstdio> using namespace std; typedef long long ll; ; int n, q; int cnt[MAXN]; ll a[M ...

  10. golang之http

    go获取html页面 package main import ( "fmt" "io/ioutil" "net/http" "ne ...