ORZ

题目要求的是任意一个字符的后缀+若干个字符+这个字符后一定走回根的字符
因为最优编码树深度不超过log层qwq,所以可以打两个标记搜…

第一个标记是这个点是不是一个后缀+若干个字符
先搜一遍所有点的后缀,打上这个标记,然后从这些标记点开始走,走任意一个字符,如果走完了这个字符,这个标记点没有走到根,这个字符就是不合法的,同时如果此时走到的位置没有标记,就可以打上第一个标记加入队列
第二个标记是走字符走到编码树的某个节点时,标记点是否走过根,就是一个避免重复状态的东西,我不知到咋解释比较清晰,可能看代码更好理解一些?

我不会证明复杂度….我感觉是可以n^2的…
code:

#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<complex>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;inline void read(int &x)
{char c; while(!((c=getchar())>='0'&&c<='9'));x=c-'0';while((c=getchar())>='0'&&c<='9') (x*=10)+=c-'0';
}
const int maxn = 2100000;
const int maxm = 3010000;int n,m;
int id[maxn],in;
int son[maxn][3],tot;
char str[maxm];
int t[maxn],tp;bool suf[maxn],back1[maxn],ok[maxn];
void dfs1(const int p1,const int p2)
{if(!son[p1][0]){dfs1(1,p2);return;}if(!son[p2][0]){if(!suf[p1]) suf[t[++tp]=p1]=true;return;}dfs1(son[p1][0],son[p2][0]);dfs1(son[p1][1],son[p2][1]);
}
void dfs2(const int p1,const int p2)
{if(!son[p2][0]){if(!back1[p1]) back1[p1]=true,dfs2(p1,1);return;}if(!son[p1][0]){if(p2!=1) ok[p1]=false;if(!suf[p2]) suf[p2]=true,dfs2(1,p2);return;}dfs2(son[p1][0],son[p2][0]);dfs2(son[p1][1],son[p2][1]);
}
int ans[maxn],ansn;int main()
{scanf("%d",&n);scanf("%s",str+1); t[tp=1]=tot=1;for(int i=1;i<=n;i++){char cc=str[i];if(cc=='1'){son[t[tp]][1]=++tot;t[++tp]=tot;}else if(cc=='0'){son[t[tp]][0]=++tot;t[++tp]=tot;}else if(cc=='B') tp--;else id[t[tp]]=++in;}tp=0; for(int i=2;i<=tot;i++) dfs1(1,i);for(int i=1;i<=tot;i++) if(id[i]) ok[i]=true;for(int i=1;i<=tp;i++) dfs2(1,t[i]);ansn=0;for(int i=1;i<=tot;i++) if(ok[i]) ans[++ansn]=i;printf("%d\n",ansn);for(int i=1;i<=ansn;i++) printf("%d\n",id[ans[i]]);return 0;
}

BZOJ1140: [POI2009]KOD 编码相关推荐

  1. 省选模拟赛记录(越往下越新哦~~~)

    LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...

  2. 日常开发中常见英语单词(都总结好啦)

    byte[baɪt] : 字节; Java 关键字,8大基本数据类型 short[ʃɔːt] : 短类型; Java 关键字,8大基本数据类型 int[ɪnt] :整型; Java 关键字,8大基本数 ...

  3. 创建数据库,指定数据库的字符集和编码顺序

    创建数据库,指定它的字符集和编码顺序 create database {数据库名称} CHARACTER SET {字符集} COLLATE {排序规则} 举例: create database co ...

  4. Myeclipse中修改项目默认编码还是乱码?一步永久解决!

    在myeclipse中修改默认编码后发现项目还是乱码? 点击Windows选择Preferences 如下图

  5. form表单提交编码的问题

    浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urle ...

  6. vs2012下编码引起的一个神坑

    当前有一个项目里面会报解决该文件不能在当前代码页(936)中表示的字符的warning, 根据这个方法 我修改了编码,发现确实不再报warning了 但是尼玛却报出了error 真是太奇怪了!!

  7. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  8. shell 批量转换文件编码

    相信大家在平时的跨平台编程中碰到过文件编码问题,比如在Windows代码字符编码方式是GB2312,然而转到Linux却只支持utf-8,虽然对代码部分没啥影响,但是很多中文注释部分,却一片乱码,很让 ...

  9. Linux实现ffmpeg H.265视频编码

    Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...

  10. iOS视频硬编码技术

    iOS视频硬编码技术 一.iOS视频采集硬编码 基本原理 硬编码 & 软编码 硬编码:通过系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软 ...

最新文章

  1. 麻省理工学院韩松教授实验室招收科研实习生(可远程)
  2. 博通收购高通12张PPT深度解析!
  3. 散列算法 SHA-1,SHA-2和SHA-256之间的区别
  4. java调用百度搜索_Java爬虫怎么调用百度搜索引擎,对关键字的网页爬取?
  5. 四管前级怎么去掉高低音音调_TDG Audio达芬奇:什么是前级,后极?
  6. STL源码剖析---迭代器失效小结
  7. 04 linux用户群组和权限
  8. LeetCode 1060. 有序数组中的缺失元素(二分查找)
  9. 计算机组成说明,计算机组成与系统结构考试说明.ppt
  10. C++异常处理类与自定义异常处理类
  11. tensorflow学习笔记(1):sess.run()
  12. 简单说说我对几位认识的号主的印象
  13. go-elasticsearch: Elastic官方的Go语言客户端
  14. MQTT 控制报文 - PUBLISH发布消息,PUBACK,PUBREC,PUBREL,PUBCOMP - 第6章
  15. Java日志系统学习之log4j!
  16. 牛客网项目1.7项目调试技巧
  17. 移动硬盘只显示盘符,不显示容量,也不能打开
  18. 计算机原理--全加器
  19. 修改layui绿色为蓝色
  20. 2023届计算机保研面试基础专业问题(数据结构、算法、计算机语言、计算机网络、数据库、操作系统、数学)

热门文章

  1. 手机wifi已连接但无法访问互联网_我们的手机WiFi出现“已连接但无法上网”时咋办?...
  2. linux每日命令(3):ln命令
  3. java流量监控系统demo_搭建一个简单的基于web的网络流量监控可视化系统
  4. Android内存和SD卡的数据存取
  5. 世界杯的狂欢也是黑灰产的狂欢?
  6. i7 10510u相当于什么处理器
  7. 大学实训_软件毕设_Java入门实战_商场管理系统_Punrain
  8. Power BI 学习三:数据整理和关系管理
  9. 社区产品策划4元素:个人中心、内容、消息盒子、导航
  10. Windows进行磁盘碎片化整理