多校第五場的題。

首先是一個好數只在某個進制下,不會是在兩個進制下都爲好數。

另外每個進制好數的個數爲d!-(d-1)!,因爲要保證第一位不爲0.

然後就是在臨界進制下有多少個好數的問題,可以變成兩個子問題,一個是找到小於n的第一個排列數,第二個是排列數的排名。

康託展開修改一下就可以變成求這兩個問題。

具體來說就是對於某個位的數字,比它小且不在前面出現的數字作爲當前位時後面無論怎麼擺都會小於這個數,so個數×剩下位數的階乘就是排名再增加的。

最後一位要+1,第一位不能爲0。區別在於如果現在的數字是前面出現過的數字,直接break掉。

比賽的時候口胡了一下,後來覺得麻煩就否決掉了23333.

其實沒有多複雜。

#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define dow(i,l,r) for(int i=r;i>=l;i--)
#define rep0(i,r) for(int i=0;i<r;i++)
#define repedge(i,x)
#define maxn 50010
#define LL long long
using namespace std; const LL mm=;
int a[maxn],b[maxn],c[maxn],num[maxn],n,len,len2;
LL f[maxn];
char s[maxn];
double maxd[maxn]; void change(char *s)
{
len=strlen(s);
rep0(i,len) a[len-i-]=s[i]-'';
} void small(int *a)
{
a[]--;
rep(i,,len-)
if (a[i]<) {
a[i+]--;
a[i]+=;
}
else break;
while (len && !a[len-]) len--;
} void tobe(int m)
{
len2=;
rep0(i,len) c[i]=a[i];
int len1=len;
while (len1) {
int now=;
dow(i,,len1-) {
now=(now*+c[i]);
c[i]=now/m;
now%=m;
}
b[len2++]=now;
if (len2>m) break;
while (len1 && !c[len1-]) len1--;
}
} LL ask(int m)
{
tobe(m);
if (len2>m) return (f[m]-f[m-]+mm)%mm;
if (len2<m) return ;
rep0(i,m) num[i]=;
LL ans=-f[m-];
dow(i,,m-) {
rep0(j,b[i])
if (!num[j]) ans=(ans+f[i])%mm;
if (num[b[i]]) break;
num[b[i]]=;
if (!i) ans++;
}
return ans;
} LL calc()
{
LL sum=;
int now;
for(now=;maxd[now+]<=len-;now++);
if (now>) sum=(f[now-]-+mm)%mm;
LL more=ask(now)+ask(now+);
sum=(sum+more)%mm;
return sum;
} int main()
{
int tt;
// freopen("1009.in","r",stdin);
// freopen("1.out","w",stdout);
scanf("%d",&tt);
f[]=;
for(int i=;i<=maxn;i++) {
f[i]=f[i-]*(LL)i%mm;
maxd[i]=log(i)*(i-)/log();
}
while (tt--) {
scanf("%s",s);
change(s);
small(a);
LL ans=-calc();
scanf("%s",s);
change(s);
ans=((ans+calc())%mm+mm);
printf("%lld\n",ans%mm);
}
return ;
}

【hdu6093】Rikka with Number的更多相关文章

  1. 【转】oracle数据库NUMBER数据类型

    原文:http://www.jb51.net/article/37633.htm NUMBER ( precision, scale)a)  precision表示数字中的有效位;如果没有指定prec ...

  2. 【CF245H】Queries for Number of Palindromes(回文树)

    [CF245H]Queries for Number of Palindromes(回文树) 题面 洛谷 题解 回文树,很类似原来一道后缀自动机的题目 后缀自动机那道题 看到\(n\)的范围很小,但是 ...

  3. 【Hihocoder1413】Rikka with String(后缀自动机)

    [Hihocoder1413]Rikka with String(后缀自动机) 题面 Hihocoder 给定一个小写字母串,回答分别把每个位置上的字符替换为'#'后的本质不同的子串数. 题解 首先横 ...

  4. 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树

    [BZOJ4026]dC Loves Number Theory Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.    给 ...

  5. 【LeetCode】375. Guess Number Higher or Lower II 解题报告(Python)

    [LeetCode]375. Guess Number Higher or Lower II 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...

  6. 【LeetCode】137. Single Number II 解题报告(Python)

    [LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...

  7. 【LeetCode】306. Additive Number 解题报告(Python)

    [LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...

  8. 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)

    [LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...

  9. 【POJ2699】The Maximum Number of Strong Kings(网络流)

    Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...

随机推荐

  1. 解决 idea template jsp模板中使用自定义路径 模板不显示问题

    ${} 是一个模板中的关键字,所以建立时需要用 \ 注释即可正常显示  ${APP_PATH}

  2. DevOps是一种文化,不是角色!

    一.DevOps是一种文化,不是角色! 软件无处不在.在如今的世界里,每个主流公司/组织都和软件开发息息相关,并且公司需要向软件一样运作.更快且更敏捷,同时保证安全性和可靠性,这样的要求前所未有的强烈 ...

  3. js插件实现一键复制功能

    clipboard.js 可以实现纯 JS 的从浏览器复制文本到系统剪贴板的功能. 使用方法: 1. 下载 clipboard.js,并在页面中引入该插件.clipboard.js 下载地址: htt ...

  4. jenkins 入门教程

    jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的"自动化"编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, ...

  5. JAVA验证码识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本

    JAVA验证识别:基于jTessBoxEditorFX和Tesseract-OCR训练样本 工具准备: jTessBoxEditorFX下载:https://github.com/nguyenq/jT ...

  6. JDBC处理大数据

    1.处理大文本 package com.demo; import java.io.File; import java.io.FileNotFoundException; import java.io. ...

  7. [原创软件]PC端与移动端文件信息互通工具

    一个不小心,花了几个小时,就做出来了一个专利,这不科学啊... 软件主要功能: 跨平台(已适配Mac.Windows)远程连接手机端和PC端 远程执行shell命令 远程和本地文件实现互通传输共享 显 ...

  8. datax 执行流程分析

    https://www.jianshu.com/nb/29319571 https://www.jianshu.com/p/b10fbdee7e56

  9. Numpy入门笔记第一天

    # 导入包 import numpy as np # 创建一维数组 a = np.arange(5) print "一维numpy数组", a print "数组的类型& ...

  10. CSS3在线实战

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本节课视频网站:https://www ...