【hdu6093】Rikka with Number
多校第五場的題。
首先是一個好數只在某個進制下,不會是在兩個進制下都爲好數。
另外每個進制好數的個數爲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的更多相关文章
- 【转】oracle数据库NUMBER数据类型
原文:http://www.jb51.net/article/37633.htm NUMBER ( precision, scale)a) precision表示数字中的有效位;如果没有指定prec ...
- 【CF245H】Queries for Number of Palindromes(回文树)
[CF245H]Queries for Number of Palindromes(回文树) 题面 洛谷 题解 回文树,很类似原来一道后缀自动机的题目 后缀自动机那道题 看到\(n\)的范围很小,但是 ...
- 【Hihocoder1413】Rikka with String(后缀自动机)
[Hihocoder1413]Rikka with String(后缀自动机) 题面 Hihocoder 给定一个小写字母串,回答分别把每个位置上的字符替换为'#'后的本质不同的子串数. 题解 首先横 ...
- 【BZOJ4026】dC Loves Number Theory 分解质因数+主席树
[BZOJ4026]dC Loves Number Theory Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给 ...
- 【LeetCode】375. Guess Number Higher or Lower II 解题报告(Python)
[LeetCode]375. Guess Number Higher or Lower II 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...
- 【LeetCode】137. Single Number II 解题报告(Python)
[LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...
- 【LeetCode】306. Additive Number 解题报告(Python)
[LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)
[LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...
- 【POJ2699】The Maximum Number of Strong Kings(网络流)
Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...
随机推荐
- 解读python手册的例子a, b = b, a+b
Python手册上有个例子,用于输出10以内的斐波那契序列.代码如下: a, b = 0, 1 while b < 10: print(b) a, b = b, a+b 用到了一些Python的 ...
- Unity CombineTexture
public Texture2D CombineTexture(Texture2D background, Texture2D top) { int width = background.width; ...
- qs.js - 更好的处理url参数
第一次接触 qs 这个库,是在使用axios时,用于给post方法编码,在使用过程中,接触到了一些不同的用法,写在这里分享一下. qs.parse qs.parse 方法可以把一段格式化的字符串转换为 ...
- 【ZABBIX】SNMPtrap实现主动监控的原理与安装配置
工欲善其事,必先利其器.作为一款强大的开源软件,Zabbix号称“Monitor Everything”,其所依赖的,很大程度上便是SNMP的数据采集支持.SNMP 协议是用来管理设备的协议,目前SN ...
- 第四次ScrumMeeting博客
第四次ScrumMeeting博客 本次会议于10月28日(六)22时整在3公寓725房间召开,持续15分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕. 1. 每个人的工作(有Issue的内容和 ...
- Scrum立会报告+燃尽图(十一月十五日总第二十三次):代码规范与技术交流
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 项目地址:https://git.coding.net/zhang ...
- Java中的多态,引用类型的转换
1.多态分为引用多态和方法多态,见测试类 package com.wangcf; //父类 public class Animal { public void eat(){ System.out.pr ...
- 02-JAVA 初始化
构造器 概念:在创建对象时被自动调用的方法,构造器采用和类名一样的名称 创建对象时,会为其分配存储空间,并调用相应的构造器进行初始化.这就确保了在操作对象之前,这个对象已经被恰当的初始化了. 不接受仁 ...
- GIT团队实战博客
项目要求 组长博客 遇到的困难及解决办法 组员1(组长):王彬 遇到的困难 在团队任务分工的时候没有充分照顾到所有人,导致队员们的工作量不均. 现场编程时间不够 解决办法 在此对组员们表示抱歉,由于 ...
- 团队Alpha冲刺(四)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:何家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员:何宇恒 展示组内最新 ...