题目描述

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^某个数.具体实现要分类讨论一下,不太难,细节稍多.

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

代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. typedef unsigned long long ull;
  5. namespace bdc{
  6. ull hr[64];
  7. inline int borderless(ull str,int len){
  8. ull a=0,b=0;
  9. for(int i=0;i<len;++i){
  10. a|=str&(1<<i);
  11. b=(b<<1)|((str>>(len-i))&1);
  12. if(a==b) return 0;
  13. }
  14. return 1;
  15. }
  16. inline void print(ull str,int len){
  17. for(int i=0;i<len;++i) putchar('a'+((str>>i)&1));
  18. }
  19. inline ull calc(int n,ull k){
  20. ull ans=0;
  21. for(int i=0;i<n;++i){
  22. hr[0]=1;
  23. for(int j=1;j<=i;++j){
  24. hr[j]=borderless(ans,j);
  25. }
  26. for(int j=i+1;j<n;++j){
  27. hr[j]=0;
  28. for(int k=0;k+k<=j-1;++k){
  29. int v=std::max(i,k); // prefix that has been determined
  30. if(k+v+1>j){ // if overlapped
  31. int vt=k+v+1-j;
  32. ull mask=(1ull<<vt)-1;
  33. if((ans&mask) == ((ans>>(j-k))&mask)){
  34. hr[j]+=hr[k]; // if can into border
  35. }
  36. }
  37. else{
  38. hr[j]+=hr[k]<<(j-k-v-1); // if not overlapped, then [border][len(xjbstr|NULLStr)=j-k-v][border]
  39. }
  40. } /// count bordered strings
  41. hr[j]=(1ull<<(j-i))-hr[j]; /// to borderless
  42. }
  43. if(k>hr[n-1]){
  44. k-=hr[n-1];
  45. ans|=1ull<<i;
  46. }
  47. }
  48. return ans;
  49. }
  50. }
  51. int main(){
  52. freopen("borderless.in","r",stdin);
  53. freopen("borderless.out","w",stdout);
  54. int n;
  55. ull b;
  56. while(~scanf("%d%llu",&n,&b)){
  57. using namespace bdc;
  58. if(!n && !b) return 0;
  59. print(calc(n,b),n);
  60. putchar('\n');
  61. }
  62. return 0;
  63. }

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. VC----对话框Dialog

    一个非模态对话框,当作主窗体的创建:(符合窗口创建的步骤) 第一步:补充一个模板,在RC脚本文件文件中,这是和普通窗口不一样的地方.这利益于编译器和链接器的支持呀. #include "wi ...

  2. C#值类型参数传递的性能开销

    Performance issues Let's dig a little deeper. When data is passed into methods as value type paramet ...

  3. (转)JS Date格式化为yyyy-MM-dd类字符串

    Date.prototype.format = function(format){ var o = { "M+" : this.getMonth()+1, //month &quo ...

  4. Transmission 设置硬盘缓存

          1.找到settings.json 调置文件.此文件是transmission的配置文件.一般存放在  /home/用户名/.config/transmission 目录下.       ...

  5. ecshop程序结构说明

    文件夹说明 名称 备注(作用或意义) 根目录 前台程序文件 admin 后台程序文件 admin/help 功能的帮助文件 admin/images 后台页面用图片 admin/includes 后台 ...

  6. 快递api网接口快递调用方法

    ----------------实体类 [DataContract] public class SyncResponseEntity { public SyncResponseEntity() { } ...

  7. sqlserver权限体系(下)

    简介 在上一篇文章中,我对主体的概念做了全面的阐述.本篇文章接着讲述主体所作用的安全对象以及所对应的权限. 理解安全对象(Securable) 安全对象,是SQL Server 数据库引擎授权系统控制 ...

  8. LINUX 命令行编辑快捷键

    转自:http://www.cnblogs.com/edwardlost/archive/2012/07/27/2611536.html 删除 ctrl + d 删除光标所在位置上的字符相当于VIM里 ...

  9. MyBatis动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. MyBatis中用于实现动态SQL的元素主要有: if choose(when,otherwise) ...

  10. 一行代码解决各种IE兼容问题IE8,IE9,IE10

    一:一.指定文件兼容性模式(Xee:因为我已经放弃IE6,7了,所以以后设计的网页最低支持IE8;) 要为你的网页指定文件模式,需要在你的网页中使用meta元素放入X-UA-Compatible ht ...