HDU 6093 Rikka with Number(康托展开)
来源:互联网 发布:java编程基础培训学校 编辑:程序博客网 时间:2024/06/10 16:59
Description
定义一个数
Input
第一行一个整数
Output
对于每组用例,输出区间
Sample Input
2
5 20
123456 123456789
Sample Output
3
114480
Solution
求出
Code
#include<cstdio>#include<cmath>#include<cstring> using namespace std;typedef long long ll;#define maxn 5005#define mod 998244353int L[maxn],fact[maxn];void init(int n=5000){ int len=1; while(L[len]<=n) { len++; L[len]=log10(len)*(len-1); } fact[0]=1; for(int i=1;i<=n;i++)fact[i]=(ll)i*fact[i-1]%mod;}int dec(int x,int y){ return x-y<0?x-y+mod:x-y;}int inc(int x,int y){ return x+y>=mod?x+y-mod:x+y;}int T,a[maxn],b[maxn],c[maxn],mark[maxn];char s[maxn];int Deal(int *a,int len,int m)//把a转化成m进制 { int n=0; for(int i=1;i<=len;i++)c[i]=a[i]; while(len) { if(n>m)return n; int pre=0; for(int i=len;i;i--) { int temp=pre*10+c[i]; pre=temp%m,c[i]=temp/m; } b[++n]=pre; while(len&&c[len]==0)len--; } return n;}int Count(int *a,int len,int m){ int n=Deal(a,len,m); if(n<m)return 0; if(n>m)return dec(fact[m],fact[m-1]); for(int i=0;i<n;i++)mark[i]=0; int ans=(ll)(b[n]-1)*fact[n-1]%mod; mark[b[n]]=1; for(int i=n-1;i;i--) { for(int j=0;j<b[i];j++) if(!mark[j])ans=inc(ans,fact[i-1]); if(mark[b[i]])break; mark[b[i]]=1; if(i==1)ans=inc(ans,1); } return ans;}int Solve(int *a,int len){ if(len==0)return 0; int pos=2; while(L[pos]<len)pos++; int ans=dec(fact[pos-3],1); for(int i=pos-2;i<pos;i++)ans=inc(ans,Count(a,len,i)); return ans;}int main(){ init(); scanf("%d",&T); while(T--) { scanf("%s",s+1); int len=strlen(s+1); for(int i=1;i<=len;i++)a[i]=s[len+1-i]-'0'; a[1]--; for(int i=1;i<=len;i++) if(a[i]<0) a[i+1]--,a[i]+=10; while(len&&a[len]==0)len--; int ans=Solve(a,len); scanf("%s",s+1); len=strlen(s+1); for(int i=1;i<=len;i++)a[i]=s[len+1-i]-'0'; ans=dec(Solve(a,len),ans); printf("%d\n",ans); } return 0;}
阅读全文
0 0
- HDU 6093 Rikka with Number(康托展开)
- [HDU 6093] Rikka with Number
- HDU 6093 Rikka with Number
- HDU 6093 Rikka with Number(java大数+思维)
- HDU-6093 Rikka with Number(计数/数位dp)
- HDU 1043 Eight(康托展开)
- HDU 6093 Rikka with Number (2017 Multi-University Training Contest
- sdibt 3146 The K'th number(康托展开)
- HDU 6093 Rikka with Number (2017 Multi-Univ Training Contest 5)
- HDU 1043 Eight(bfs+康托展开)
- hdu 1430 魔板(bfs+预处理+康托展开)
- hdu 3567 Eight II (bfs+康托展开+预处理)
- hdu 1430 魔板(康托展开+BFS+巧妙转换)
- HDU Eight II(BFS+康托展开)
- csuoj1828Dictionary (康托展开)
- 排列(康托展开)
- HDU 1043 搜索+康托展开
- hdu 1027 康托展开求全排列
- [js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表
- JS/JSP
- Android中百度地图新包换旧包后,地图显示不出来的解决思路
- PDFBox学习笔记—org.apache.pdfbox.pdmodel包
- WOJ1207-Feli的糖果3
- HDU 6093 Rikka with Number(康托展开)
- mysql删除语句大全(上)
- Python基础3
- 词向量随记1
- MySQL中PROCEDURE ANALYSE
- 安全算法
- 在mybatis中关于标签mapper错的解决原因及方案
- 通俗易懂版_安装Mysql
- 用html、jquery、php编写新闻后台管理页面,动态添加新闻数据并实现数据的增删改查功能