【xsy1143】 兔子的数字 搜索
题目大意:请找到第$k$大的数,满足各位数字之和等于各位数字之积。其中$k≤10^{18}$。
首先我们要确定这个第$k$大的数有多大
我们用$f[i][j][he][ji]$表示我们要搜索一个$i$位的数字,还有$j$位没有确定,且确定的位总和为$i$,积为$j$的方案数。
我们发现:若$he+j<ji$,则$f[i][j][he][ji]=0$(假设后面大量地补$1$,即只增加各位数字之和而不增加各位数字之积,如果积过大,那么显然这种方法并不奏效)
若$he+j=ji$,则$f[i][j][he][ji]=\binom{i}{j}$(这种情况下,余下的j位均为$1$恰好可以让和等于积,组合数的意义为将$j$个$1$插入到已经确定的i-j位数中)
若$j=0$,那么显然只需要判一下和是否等于积即可。
若在这三种情况外,直接枚举下一位数字($2$到$9$枚举)。
我们设第$k$大的数字位数为$x$,每次计算$f[x][x][0][1]$,若$f[x][x][0][1]<n$,则$n-=f[x][x][0][1]$,并且$x++$,否则这个$x$即为第$k$大数的位数。
接着从大到小枚举每一位,随后计算当该数前若干位确定时的方案数,借此逐位确定整个数
时间复杂度为$O(??)$
#include<bits/stdc++.h>
#define L long long
#define M 505
using namespace std;
L n,c[M][M]={}; L calc(int n,int m,int he,int ji){
if(he+m<ji) return ;
if(!m) return he==ji;
if(he+m==ji&&ji!=)
return c[n][m];
L cnt=;
for(int i=;i<;i++)
cnt+=calc(n,m-,he+i,ji*i);
return cnt;
} int main(){
cin>>n;
for(int i=;i<M;i++){
c[i][]=;
for(int j=;j<=i;j++)
c[i][j]=c[i-][j]+c[i-][j-];
}
if(n<){printf("%d\n",n); return ;}
n--;
int hh=;
while(){
L now=calc(hh,hh,,);
if(now<n) n-=now,hh++;
else break;
}
int he=,ji=;
for(int i=hh;i;i--){
for(int j=;j<;j++){
L now=calc(i-,i-,he+j,ji*j);
if(now<n)n-=now;
else{
printf("%d",j);
he+=j; ji*=j;
break;
}
}
}
}
【xsy1143】 兔子的数字 搜索的更多相关文章
- 十分钟搞懂Elasticsearch数字搜索原理
更多精彩内容请看我的个人博客或者扫描二维码,关注微信公众号:佛西先森 前言 Elasticsearch诞生的本意是为了解决文本搜索太慢的问题,ES会默认将所有的输入内容当作字符串来理解,对于字段类型是 ...
- vue2 前端搜索实现
项目数据少的时候,搜索这样的小事情就要交给咱们前端来做了,重要声明,适用于小项目!!!!! 其实原理很简单,小demo是做搜索市区名称或者按照排名搜索. <div> <input t ...
- 空间搜索(圆范围)中Geohash编码方案和网格编码方案对比探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 多个项目中实现范围(圆)搜索的方案为:依赖库表中的X和Y字段构 ...
- 剑指Offer(二十八):数组中出现次数超过一半的数字
剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- LeetCode初级算法--数组01:只出现一次的数字
LeetCode初级算法--数组01:只出现一次的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...
- 如何有效的使用google进行搜索的20个技能
每天有数百万人因为各种各样的原因使用谷歌搜索.学生们把它用于学校,商人们把它用于研究,还有数百万人把它用于娱乐.但大多数人可能没有充分利用谷歌搜索的潜力. 想要更有效地使用谷歌搜索,并得到您想要的搜索 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- LDAP注入与防御解析
[目录] 0x1 LDAP介绍 0x2 LDAP注入攻击及防御 0x3 参考资料 0x1 LDAP介绍 1 LDAP出现的背景 LDAP(Lightweight Directory Access Pr ...
- Lucene的Query类介绍
把Lucene的查询当成sql的查询,也许会笼统的明白些query的真相了. 查询分为大致两类,1:精准查询.2,模糊查询. 创建测试数据. private Directory directory; ...
随机推荐
- yii2学习网站
1.http://tech.anruence.com/ 2.http://www.yiichina.com/doc/guide/2.0/input-multiple-models
- PHP compact函数
$firstname = "Peter"; $lastname = "Griffin"; $age = "41"; $data = comp ...
- T4系列文章之2:T4工具简介、调试以及T4运行原理(转)
出处:http://www.cnblogs.com/damonlan/archive/2012/01/12/2320429.html 一.前言 经过第一篇,我想大家现在对T4有了基本的印象,应该对T4 ...
- DataGrid组件
<?xml version="1.0" encoding="utf-8"?><s:WindowedApplication xmlns:fx=& ...
- redis之单机和主从环境搭建
单机环境搭建 官网http://redis.io/download下载xxx.tar.gz二进制压缩包,注意下载2.8+版本,2.8之前的版本之前从服务器不支持部分重复制,2.6之前的版本不支持set ...
- ROM初始化HEX文件
intel hex格式 记录格式 Intel HEX由任意数量的十六进制记录组成.每个记录包含5个域,它们按以下格式排列: :llaaaatt[dd...]cc 每一组字母对应一个不同的域,每一个字母 ...
- OpenGL模型视图变换、投影变换、视口变换的理解
OpenGL中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕向外). 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对 ...
- centos7 磁盘管理—— lvm的使用
Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间.普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不 ...
- Node.js最新Web技术栈(2015年5月)
https://cnodejs.org/topic/55651bf07d4c64752effb4b1
- 【WinRT】使用 T4 模板简化字符串的本地化
在 WinRT 中,对控件.甚至图片资源的本地化都是极其方便的,之前我在博客中也介绍过如何本地化应用名称:http://www.cnblogs.com/h82258652/p/4292157.html ...