hdu 6156
来源:互联网 发布:股票模拟交易软件 编辑:程序博客网 时间:2024/06/03 22:59
题目链接:点击打开链接
题解思路:因为以10进制来说,1位的回文串有9个,2位的有9个,3位的有90个,那么我们发现没差两位他们的倍增方式是乘以进制原始值为进制减一。那么我们就可以根据这个来事先打表。
代码:
#include <iostream>#include <cstdio>#include<set>#include<algorithm>using namespace std;typedef long long ll;const int mx = 2e5+10;int a[37][mx],b[37];ll find_ans(int index,int po){ ll res,cnt=0,w=0,num=po-1,half=1; while(1) { if(w>0&&w%2==0) num*=po; w++; if(cnt+num>=index) break; cnt+=num; } index=index-cnt-1;// int i; for(i=0;i<(w-1)/2;i++) half*=po; half+=index; res=half; if(w%2==1) half/=po; while(half){ res=res*po+half%po; half/=po; } return res;}int main(){ int t,cas = 1; scanf("%d",&t); for(int i=2;i<=36;i++){ int po = 1; b[i] = 0; ll ret = find_ans(po,i); while(ret<=1e9){ a[i][b[i]++] = ret; po++; ret = find_ans(po,i); } } while(t--){ int L,R,l,r; ll ans = 0; scanf("%d%d%d%d",&L,&R,&l,&r); for(int i=l;i<=r;i++){ int lx = lower_bound(a[i],a[i]+b[i],L)-a[i]; int rx = upper_bound(a[i],a[i]+b[i],R)-a[i]; //cout << lx << " " <<rx << endl; ans += 1ll*(rx-lx)*i; ans += R-L-(rx-lx)+1; } printf("Case #%d: %lld\n",cas++,ans); } return 0;}
阅读全文
0 0
- hdu-6156
- hdu 6156
- hdu 6156
- Hdu 6156 Palindrome Function
- HDU 6156 Palindrome Function
- HDU 6156 数位DP
- hdu 6156 Palindrome Function
- hdu 6156 数位dp
- hdu 6156 Palindrome Function
- HDU-6156 Palindrome Function
- HDU 6156 数位DP
- HDU 6156 数位DP
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- SQL的主键和外键约束详解及用途
- SPOJ COT 主席树+LCA(树上第k大)
- Linux时间子系统(三) -- clockevent, tick device
- 【spring】通过GZIP压缩提高网络传输效率(可以实现任何资源的gzip压缩、包括AJAX)
- hdu1548A strange lift(bfs)
- hdu 6156
- Python leetcode记录(1) -Two Sum
- 线程案例
- 最大的位或
- 炮仗的引线
- 翻转链表
- 爬虫_
- SpringMVC自定义格式化转换器
- UVa 11132 例题8-4 传说中的车(Fabled Rooks)