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. Nginx/Apache服务连接数梳理

    统计连接数,使用netstat命令或ss命令都可以1)统计连接数(80端口)[root@wang ~]# netstat -nat|grep -i "80"|wc -l872 或者 ...

  2. cell与cell之间的间距问题,以及section跟随屏幕滑动而滑动问题

    苹果在cell与cell之间默认没有间距,这样有时候不能满足我们界面要求,所以我们就需要将cell设置为分组模式(也就是每组一行或者多行,分为n组),然后我们就可以在代理中根据自己的需求设计cell之 ...

  3. JavaScript继承与原型链

    对于那些熟悉基于类的面向对象语言(Java 或者 C++)的开发者来说,JavaScript 的语法是比较怪异的,这是由于 JavaScript 是一门动态语言,而且它没有类的概念( ES6 新增了c ...

  4. WP老杨解迷:发布包多少大小合适

    有位做安卓的老兄这样描述发布包大小问题:发布包和女人一样,新包如年轻女子,不能太瘦,太瘦没有货,所以大家都喜欢身段窈窕的少女,正火的产品如中年妇女,要得是风韵魅力,胖瘦已经不那么重要,但是也不能太胖, ...

  5. zabbix-proxy3.0.4编译安装

    数据库配置: innodb_file_per_table=1   安装mysql rpm -ivh http://dev.mysql.com/get/mysql-community-release-e ...

  6. top状态及其常用技巧

    看tcp状态 /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'   在 top 状态下,按 "shif ...

  7. 帆软FineReport如何使用程序数据集

    大多数情况下,FineReport直接在设计器里使用“数据集查询”,直接写SQL就能满足报表要求,但对于一些复杂的报表,有时候SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表 ...

  8. 这些javascript面试题,你做对了几道?

    1.---------------------------------------------------- var fun = function(){ this.name = 'peter'; re ...

  9. 我的开发框架之ORM框架

    今天我想分享一下我自己的ORM框架,虽然谈不是很好,但我个人认为还是蛮好用的,跟大家分享交流一下. 首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上, ...

  10. ASP.NET MVC3入门教程之ajax交互

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=100&extra=page%3D1 随着web技术的不断发展与 ...