ASC47B borderless
题目描述
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的更多相关文章
- mac下borderless的window(无标题栏)如何实现
子类化NSWindow: - (void)awakeFromNib { [selfsetStyleMask:NSBorderlessWindowMask]; [selfsetAcceptsMouseM ...
- DXGI 1.5新特性
为了支持更具弹性和的输出设定和副本机制,DXGI1.5添加了下面这些功能: 高动态范围(HDR)和宽色域(WCG) 可变刷新率显示 复制输出 奉献和再生资源 高动态范围(HDR)和宽色域(WCG) H ...
- Bootstrap Metronic 学习记录(二)菜单栏
1.简介 1) .环境配置 2) .提取页面 2).动态生成菜单(无限级别树) 2.系统环境配置 项目需要程序数据支撑,这里选择MVC5.0+EF6.0[SQLSERVER](不对MVC架构和SQ ...
- Android Lint Checks
Android Lint Checks Here are the current list of checks that lint performs as of Android Studio 2.3 ...
- 做Adsense的一些经验
The payment you receive per click depends on how much advertisers are paying per click to advertise ...
- 安卓xml文件中常见的问题
1.EditText显示不完全
- 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 ...
- dotNet开发游戏微端
需求分析 功能要求 当玩家使用不支持 unity webplayer 的浏览器进入游戏时,让玩家通过微端玩游戏. 确保微端的功能和页游戏功能一致. 大体功能就是为unity web game开发微端, ...
- ZUI前段框架简介
一.说明 基于Bootstrap定制 ZUI继承了Bootstrap 3中的大部分基础内容,但出于与Bootstrap不同的目的,一些组件都进行了定制和修改.这些变化包括: 移除了部分插件的限制,增加 ...
随机推荐
- 解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免
在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this. ...
- Ajax– 刷新页面 【转】
jquery刷新页面(局部及全页面刷新) 2009-12-31 11:39:32| 分类: javascript|举报|字号 订阅 局部刷新: 这个方法就多了去了,常见的有以下几种: $.get方法 ...
- jquery 中的事件冒泡
废话少说,先来一段代码热热身: <!DOCTYPE html> <html> <head> <title>demo</title> < ...
- 浅谈JavaScript中的变量、参数、作用域和作用域链
基本类型和引用类型 在JavaScript中有两种数据类型值.基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值指的是可能由多个值构成的对象.在JavaScript中有5种基本数据类型 ...
- ASP.NET MVC4/5 - Ajax 防止 CSRF攻击
前言 CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对 ...
- fedora23也会死机, 怎么办
现在使用的 fedora23 , 在有些 时候老是 死机, 有的是 firefos引起的, 但 更多的时候, 是 由 终端terminal gnome-terminal引起的, 特别是在 操作 vim ...
- 到底instanceof是啥?
对Js有一定了解的盆友肯定都知道instanceof 并且还很常用,比如说用[1, 2, 3] instanceof Array 来判断是否是数组.所以我们可能会简单的以为他就是一个用来判断typeo ...
- java练手 韩信点兵
Problem C 韩信点兵 时间限制:3000 ms | 内存限制:65535 KB 描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队 ...
- page文件
题目:主页面引用 page 文件 ./configs/style.conf ./templates/main.html <body> <{config_load file=" ...
- java项目报junit 相关错误
maven配置,java工程运行时需要把test测试相关移除