WC结束了,来补一下这题的题解

首先感谢SC神犇YYY(第一个AC此题的神犇)教我做法

再感谢教YYY做法的Claris大爷

首先,我们发现一个性质,一个合法的数的后缀必定是合法的,所以我们就可以bfs了,往合法的数的最高位加0或1

只有最高位是1的数才有可能是答案

YYY大爷告诉我们,并且不难证明任何时候队列中以0开头的数字数量小于等于以1开头的数字数量,并且每次进入合法节点最多只会生成一个不合法数字,因此整个搜索是O(n*处理每个节点的时间)的

对于队列里的每个数,记录3个东西,十进制下的hash值,十进制长度len,二进制后len位

同时维护当前10^len的二进制,由于是BFS,所以len只增不减

最后有一个问题,队列里的元素不是有序的。这也很好办,对于相同长度的序列,只需要先全部加0,再全部加1

具体细节可以看我的代码

窝的代码是目前为止AC代码中最短的

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define N 23333
#define L 170
#define P 1000000009 using namespace std;
inline void multiply(int *a,int b){
int k=0;
for (int i=1;i<=a[0];++i){
a[i]=a[i]*b+k;
k=a[i]>>1;
a[i]=a[i]&1;
}
for (;a[0]<165&&k;k=k>>1) a[++a[0]]=k&1;
} inline void add(int *a,const int *b){
a[0]=max(a[0],b[0]);
int k=0;
for (int i=1;i<=a[0];++i){
a[i]+=b[i]+k;
k=a[i]>>1;
a[i]=a[i]&1;
}
for (;a[0]<165&&k;k=k>>1) a[++a[0]]=k&1;
} inline int gethash(int *a,int len){
int ret=0;
for (int i=1;i<=len;++i)
ret=((ll)ret*233%P+a[i])%P;
return ret;
} void print(int *a,int len){
for (int i=len;i;--i) printf("%d",a[i]);
puts("");
} struct node{
int hash,len;
int b[L];
};
node q[N];int qh,qt,lastqh,lastqt;
int rank;
int t[L]; int main(){
scanf("%d",&rank);--rank;
if (!rank){puts("1");return 0;}
lastqh=qh=0;lastqt=qt=2;
q[1].len=1;q[1].hash=0;
q[1].b[0]=1;q[1].b[1]=0;
q[2].len=1;q[2].hash=1;
q[2].b[0]=1;q[2].b[1]=1;
t[0]=1;t[1]=1;
for (;;lastqh=qh,lastqt=qt){
multiply(t,10);
for (int k=0;k<2;++k){
qh=lastqh;
while (qh<lastqt){
q[++qt]=q[++qh];
++q[qt].len;
q[qt].hash=((ll)q[qt].hash*233%P+k)%P;
if (k) add(q[qt].b,t);
if (q[qt].hash!=gethash(q[qt].b,q[qt].len)) --qt;
else if (k) --rank;
if (!rank){
print(q[qt].b,q[qt].len);
return 0;
}
}
}
}
return 0;
}

  

bzoj4404: [Neerc2015]Binary vs Decimal的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. Write a program to convert decimal to 32-bit unsigned binary.

    Write a program to convert decimal to 32-bit unsigned binary. Write a program to convert a 32-bit un ...

  3. General Decimal Arithmetic 浮点算法

    General Decimal Arithmetic http://speleotrove.com/decimal/ General Decimal Arithmetic [ FAQ | Decima ...

  4. 数据库设计(2/9):域,约束和默认值(Domains, Constraints and Defaults)

    对于设计和创建数据库完全是个新手?没关系,Joe Celko, 世界上读者数量最多的SQL作者之一,会告诉你这些基础.和往常一样,即使是最专业的数据库老手,也会给他们带来惊喜.Joe是DMBS杂志是多 ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟

    中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...

  6. 【代码】二进制转BCD [转]

    BCD:Binary Coded Decimal 即用4位二进制编码表示1位的十进制数.   定义:BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行. ...

  7. python ide ---wing 注册机

    注册机脚本代码如下: import sha import string BASE2 = '01' BASE10 = '0123456789' BASE16 = '0123456789ABCDEF' B ...

  8. 初步认识Hive

    初步认识Hive hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习 ...

  9. 配置ogg异构oracle-mysql(1)基础环境配置

    一.环境描述: 192.168.0.164 ( Oracle ) —> 192.168.0.165 (Mysql ) 版本: 操作系统:redhat5.8 Oracle:  11.2.0.3 M ...

随机推荐

  1. Oracle Update 语句语法与性能分析 - 多表关联

    Oracle Update 语句语法与性能分析 - 多表关联   为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create ...

  2. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  3. 将数据库备份到AZURE blob storage

    1创建一个Storage Account 1)点击Browse->Storage accounts 2) 填写Storage account,请记住这个名字,之后创建credential需要用到 ...

  4. Windows Phone App Studio 无码开发手机应用

    上周微软发布了一款基于Web的Windows Phone应用开发工具 "Windows Phone App Studio".它与大家熟知Visual Studio的最大不同之处是W ...

  5. scrapy 保存到 sqlite3

    scrapy 爬取到结果后,将结果保存到 sqlite3,有两种方式 item Pipeline Feed Exporter 方式一 使用 item Pipeline 有三个步骤 文件 pipelin ...

  6. lecture13-BP算法的讨论和置信网

    这是HInton课程第13课,这一课有两篇论文可以作为课外读物<Connectionist learning of belief networks>和<The wake-sleep ...

  7. SQL2005SP4补丁安装时错误: -2146233087 MSDTC 无法读取配置信息。。。错误代码1603的解决办法

    是在安装slq2005sp3和sp4补丁的时候碰到的问题. 起先是碰到的错误1603的问题,但网上搜索的1603的解决办法都试过了,google也用了,外文论坛也读了,依然没有能解决这个问题. 其实一 ...

  8. 绝对干货:供个人开发者赚钱免费使用的一些好的API接口

    不久前,我写了一篇文章,名为<科普技术贴:个人开发者的那些赚钱方式>,讲了一些个人开发者接私活和自己做软件加广告的一些科普知识.可是做软件,需要服务器,需要后台,对于一些小的开发者,想赚点 ...

  9. TCP/IP中最高大上的链路层简介(二)

    引言 对于程序猿来讲,似乎越接近底层,就越显得高大上.这也算是程序猿们的共同认知吧,虽然不是所有人.今天LZ就和各位一起探讨一下TCP/IP中最高大上的一层,也就是最底层的链路层. 这一层LZ了解的还 ...

  10. C++学习准则

    C++学习准则  1.把C++当成一门新的语言学习(和C没啥关系!真的): 2.看<Thinking In C++>,不要看<C++变成死相>(C++编程思想,翻译的非常差): ...