题目描述

border集合为{NULL,str}的串str称为borderless串.

border即KMP里的那个.

字符集{'a','b'},给定长度n,求第k(给定)小的borderless串.

题解

按位确定,这时我们需要计算对于一个给定的前缀,以它为前缀的长k的borderless串个数.

borderless串个数并不好求,我们考虑求有border的串个数,再容斥掉.

考虑前缀为t的长度为j的有border串个数为ex,长度为j的borderless串个数为2^(j-min(j,t))-ex.

考虑如何计算ex.

枚举最短非空border长度v,首先这个border需是borderless的,否则违反"最短"性.显然这个border的数量已经计算出来了.如果中间没有限制就可以瞎jb填了,如果有限制只有可能是前缀的限制,那么border串的个数除去 2^某个数.具体实现要分类讨论一下,不太难,细节稍多.

其实并不推荐我这样压位.害死人.

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
typedef unsigned long long ull;
namespace bdc{
ull hr[64];
inline int borderless(ull str,int len){
ull a=0,b=0;
for(int i=0;i<len;++i){
a|=str&(1<<i);
b=(b<<1)|((str>>(len-i))&1);
if(a==b) return 0;
}
return 1;
}
inline void print(ull str,int len){
for(int i=0;i<len;++i) putchar('a'+((str>>i)&1));
}
inline ull calc(int n,ull k){
ull ans=0;
for(int i=0;i<n;++i){
hr[0]=1;
for(int j=1;j<=i;++j){
hr[j]=borderless(ans,j);
}
for(int j=i+1;j<n;++j){
hr[j]=0;
for(int k=0;k+k<=j-1;++k){
int v=std::max(i,k); // prefix that has been determined
if(k+v+1>j){ // if overlapped
int vt=k+v+1-j;
ull mask=(1ull<<vt)-1;
if((ans&mask) == ((ans>>(j-k))&mask)){
hr[j]+=hr[k]; // if can into border
}
}
else{
hr[j]+=hr[k]<<(j-k-v-1); // if not overlapped, then [border][len(xjbstr|NULLStr)=j-k-v][border]
}
} /// count bordered strings
hr[j]=(1ull<<(j-i))-hr[j]; /// to borderless
}
if(k>hr[n-1]){
k-=hr[n-1];
ans|=1ull<<i;
}
}
return ans;
}
}
int main(){
freopen("borderless.in","r",stdin);
freopen("borderless.out","w",stdout);
int n;
ull b;
while(~scanf("%d%llu",&n,&b)){
using namespace bdc;
if(!n && !b) return 0;
print(calc(n,b),n);
putchar('\n');
}
return 0;
}

ASC47B borderless的更多相关文章

  1. mac下borderless的window(无标题栏)如何实现

    子类化NSWindow: - (void)awakeFromNib { [selfsetStyleMask:NSBorderlessWindowMask]; [selfsetAcceptsMouseM ...

  2. DXGI 1.5新特性

    为了支持更具弹性和的输出设定和副本机制,DXGI1.5添加了下面这些功能: 高动态范围(HDR)和宽色域(WCG) 可变刷新率显示 复制输出 奉献和再生资源 高动态范围(HDR)和宽色域(WCG) H ...

  3. Bootstrap Metronic 学习记录(二)菜单栏

    1.简介 1)  .环境配置 2)  .提取页面 2).动态生成菜单(无限级别树) 2.系统环境配置 项目需要程序数据支撑,这里选择MVC5.0+EF6.0[SQLSERVER](不对MVC架构和SQ ...

  4. Android Lint Checks

    Android Lint Checks Here are the current list of checks that lint performs as of Android Studio 2.3 ...

  5. 做Adsense的一些经验

    The payment you receive per click depends on how much advertisers are paying per click to advertise ...

  6. 安卓xml文件中常见的问题

    1.EditText显示不完全

  7. eclipse提示:This tag and its children can be replaced by one <TextView/> and a compound drawable

    今天在学习android开发的时候,写了这样的一段代码: <?xml version="1.0" encoding="utf-8"?> <Li ...

  8. dotNet开发游戏微端

    需求分析 功能要求 当玩家使用不支持 unity webplayer 的浏览器进入游戏时,让玩家通过微端玩游戏. 确保微端的功能和页游戏功能一致. 大体功能就是为unity web game开发微端, ...

  9. ZUI前段框架简介

    一.说明 基于Bootstrap定制 ZUI继承了Bootstrap 3中的大部分基础内容,但出于与Bootstrap不同的目的,一些组件都进行了定制和修改.这些变化包括: 移除了部分插件的限制,增加 ...

随机推荐

  1. ios 消息转发初探

    有时候服务器的接口文档上一个数据写的是string类型,这时候你就会直接把它赋值给一个label. 问题来了,有时候这个string的确是string,没有问题,有时候又是NSNumber,当然不管三 ...

  2. Mac安装Brew

    安装命令如下:curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip ...

  3. JS之function的应用

    1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: function func(){} 或 var func=function(){};  2.作为一个类构造器使用: 复制代码代码如下: ...

  4. 【Delphi】获取EIP

    var EIP: Cardinal; procedure GetEIP(); stdcall; asm pop eax; mov EIP,eax; push eax; end; procedure T ...

  5. Nginx 支持 WAF 防护功能实战

    WAF(Web Application Firewall),中文名称叫做“Web应用防火墙 WAF的定义是这样的:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提 ...

  6. ul li 下的元素内容垂直居中

    CSS: <style> * {;; } li { list-style: none; } li span { border: 1px solid red; height: 100px; ...

  7. 30 分钟开发一个简单的 watchOS 2 app <oneVcat>

    Apple Watch 和 watchOS 第一代产品只允许用户在 iPhone 设备上进行计算,然后将结果传输到手表上进行显示.在这个框架下,手表充当的功能在很大程度上只是手机的另一块小一些的显示器 ...

  8. 【9-7】XML学习笔记01

    Tips XML标签大小写敏感: XML文件一般使用国际化通用的编码“utf-8”,所以平时看到的XML文件的头部都会有这样的代码: <?xml version="1.0" ...

  9. mysql 分页性能优化

    最简单的分页方法是这样的 , 该表中存在5w左右数据 执行时间平均在10s左右,因此该种方式在数据量大的情况下查询效率极低. 优化方式有以下几种 1.此种方式平均在7-8s之间(CreateDate ...

  10. CF460C Present (二分 + 差分数列)

    Codeforces Round #262 (Div. 2) C C - Present C. Present time limit per test 2 seconds memory limit p ...