题目描述

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. POJ 2388 Who's in the Middle(水~奇数个数排序求中位数)

    题目链接:http://poj.org/problem?id=2388 题目大意: 奇数个数排序求中位数 解题思路:看代码吧! AC Code: #include<stdio.h> #in ...

  2. Fragment碎片的创建和动态更新

    Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块. 一,一个简单的fragment 1.创建两个局部文件,用于等待被调用 (1)left_fragment (2)right_frag ...

  3. Form表单中的action路径问题,form表单action路径《jsp--->Servlet路劲问题》这个和上一个《jsp--->Servlet》文章有关

    Form表单中的action路径问题,form表单action路径 热度5 评论 50 www.BkJia.Com  网友分享于:  2014-08-14 08:08:01     浏览数44525次 ...

  4. Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrchardHost.BeginRequest方法)

    BeginRequest事件处理的作用是确保所有Shell已经加载,或者在扩展有变化的时候重新加载.          void IOrchardHost .BeginRequest() {      ...

  5. Java并发编程核心方法与框架-CompletionService的使用

    接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离.使用submit()执行任务,使用take取得已完成的任务,并按 ...

  6. eclipse-4.4.2安装Groovy插件(其他版本eclipse可参考)

    步骤 : 1.启动eclipse,点击help -> Install New Software... 在弹出的窗口中点击:Add... Groovy插件的地址:http://dist.sprin ...

  7. spring InitializingBean接口

    最近工作需要得到sping中的每个事物需要执行的sql,称机会简单研究了一下spring的事务,项目中管理事务比较简单,用TransactionTemplate,就直接以TransactionTemp ...

  8. asp.net mvc 实现博客的时间分类管理

    先看效果 这个其实用c#实现起来比较简单: Sides = bllSession.IArticleBLL.GetList("") .Select(a => a.Time) . ...

  9. 自定义列表dl的使用原因和场合

    为什么要使用自定义列表? dl和ol, ul的区别? 要正确理解dl的意图, 理解 dl的 "语义" ! 才能知道为什么要使用dl, 以及在什么时候/ 什么情况下使用 dl? dl ...

  10. 来自 Google 的 R 语言编码风格指南

    来自 Google 的 R 语言编码风格指南R 语言是一门主要用于统计计算和绘图的高级编程语言. 这份 R 语言编码风格指南旨在让我们的 R 代码更容易阅读.分享和检查. 以下规则系与 Google ...