HDU6156 Palindrome Function

题意:输入L,R,l,r求[L,R]范围内在[l, r]进制下的回文数(2<=l<=r<=26, L<=R<1e9)

题解:主要是求回文数,枚举每个进制,求ans = R前面的回文数-L前面的回文数,可以发现每个进制下小于1e9的回文数比较少,直接把所有的回文数预处理排序二分就可以

#include <bits/stdc++.h>
#define ll long long
#define maxn 100100
#define BUG(x, n) for(ll i=0;i<=n;i++) cout<<x[i]<<" ";cout<<endl;
using namespace std;
ll temp[100];
vector<ll >vec[40];
ll mmp(ll x,ll t,ll k){
    ll num=0, ans = 0;
    while(x){
        temp[++num] = x%t;
        x /= t;
    }
    for(ll i=num;i>=1;i--) ans = ans*t+temp[i];
    if(k!=-1) ans = ans*t+k;
    for(ll i=1;i<=num;i++) ans = ans*t+temp[i];
    return ans;
}
void init(){
    ll t1 = 0;
    for(ll i=2;i<=36;i++)
        for(ll j=0;j<i;j++)
            vec[i].push_back(j);
    for(ll j=2;j<=36;j++){
        ll i = 1;
        while(1){
            t1 = mmp(i, j, -1);
            if(t1>1e9) break;
            vec[j].push_back(t1);
        }
    }
    for(ll j=2;j<=36;j++)
        for(ll k=0;k<j;k++){
        ll i = 1;
        while(1){
            t1 = mmp(i, j, -1);
            if(t1>1e9) break;
            vec[j].push_back(t1);
        }
    }
    for(ll i=2;i<=36;i++) sort(vec[i].begin(), vec[i].end());
}
int main(){
    init();
    ll T, L, R, l, r, ans, RR, LL, num = 1;
    scanf("%lld", &T);
    while(T--){
        ans = 0;
        scanf("%lld%lld%lld%lld", &L, &R, &l, &r);
        for(ll i=l;i<=r;i++){
            RR = upper_bound(vec[i].begin(), vec[i].end(), R)-vec[i].begin();
            LL = upper_bound(vec[i].begin(), vec[i].end(), L-1)-vec[i].begin();
            ans += (RR-LL)*(i-1)+(R-L+1);
        }
        printf("Case #%lld: %lld\n", num++, ans);
    }
    return 0;
}
时间: 2024-08-06 21:06:53

HDU6156 Palindrome Function的相关文章

hdu 6156 Palindrome Function(回文数位dp)

题目链接:hdu 6156 Palindrome Function 题意: 给你一个L,R,l,r,问你在[L,R]内在[l,r]进制下有多少数是回文数,然后算一算贡献. 题解: 由于答案和该回文数的最高位有关(因为前导0不算). 考虑dp[i][j][k],表示在i进制下,当前考虑到第j位,该数字的起始点在第k位. 然后开一个数组记录一下前面的数字,做一下记忆化搜索就行了. 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,b,siz

Palindrome Function

Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total Submission(s): 662    Accepted Submission(s): 351 Problem Description As we all know,a palindrome number is the number which reads the same backward as forward

HDU 6156 Palindrome Function 数位DP

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f(x) = 1 其他情况 解题思路: 数位DP, 统计个数 , 需要作出改变的就是进制和回文 代码: #include <iostream> #include <cstdio> #include <string> #include <vector> #inclu

【数位DP】HDU 6156 Palindrome Function

http://acm.hdu.edu.cn/showproblem.php?pid=6156 [AC] 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll mod=1e9+7; 5 int num[50]; 6 int L,R,l,r; 7 ll query(int x,int k) 8 { 9 if(x==0) return 0; 10 int cnt=0; 11 int cp

[HDOJ6156] Palindrome Function(数位dp, 枚举)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:算十进制下数字在[L,R]内用[l,r]进制表述下的数字贡献. 贡献有两种:回文数,贡献是进制k:不是回文数,贡献是1. 由于进制只有36个,枚举进制分别做统计回文数的数位dp即可,贡献按要求. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef long long LL; 5 const int maxn = 1

hdu 6156 Palindrome Function

数据好像极限,按理来说二分是可以过得,就是被卡主 #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<iostream> #include<queue> #include<map> #include<cmath> #include<set> #

CCPC for UESTC

1001. Vertex Cover 题意:有一个贪心算法求最小顶点覆盖是每次选出度数最大的点然后删去,输出一个图使得这个算法跑出来的答案是你给出的答案的三倍及以上. 题解: 构造一个二分图,设左边有 nn 个点,标号是 1 ~ n1 n.对于每个 i \in [1, n]i∈[1,n],都在右边新建 \lfloor \frac{n}{i} \rfloor??i??n??? 个点,每个点都选择左边的 ii个点连 1 条边,使得左边每个点最多只被多加了一条边.这样构造完成后可以发现贪心的做法会把右

HDU 6156 回文 数位DP(2017CCPC)

Palindrome Function Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total Submission(s): 559    Accepted Submission(s): 299 Problem Description As we all know,a palindrome number is the number which reads the same

通过百度echarts实现数据图表展示功能

现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解echarts是个怎样技术的开发者来说,可以到echarts官网进行学习了解,官网有详细的API文档和实例供大家参考学习. 2.以下是我在工作中实现整理出来的实例源码: 公用的支持js文件 echarts.js.echarts.min.js,还有其他的图表需要支持的js文件也可以到官网下载 echa