试题 算法训练 Bit Compressor

问题描述

  数据压缩的目的是为了减少存储和交换数据时出现的冗余。这增加了有效数据的比重并提高了传输速率。有一种压缩二进制串的方法是这样的:

  将连续的n个1替换为n的二进制表示(注:替换发生当且仅当这种替换减少了二进制串的总长度)

  (译者注:连续的n个1的左右必须是0或者是串的开头、结尾)

  比如:11111111001001111111111111110011会被压缩成10000010011110011。原串长为32,被压缩后串长为17.

  这种方法的弊端在于,有时候解压缩算法会得到不止一个可能的原串,使得我们无法确定原串究竟是什么。请你写一个程序来判定我们能否利用压缩后的信息来确定原串。给出原串长L,原串中1的个数N,以及压缩后的串。

  L<=16 Kbytes,压缩后的串长度<=40 bits。

输入格式

  第一行两个整数L,N,含义同问题描述

  第二行一个二进制串,表示压缩后的串

输出格式

  输出"YES"或"NO"或"NOT UNIQUE"(不包含引号)

  分别表示:

  YES:原串唯一

  NO:原串不存在

  NOT UNIQUE:原串存在但不唯一

样例输入
样例1:
32 26
10000010011110011
样例2:
9 7
1010101
样例3:
14 14
111111
样例输出
样例1:YES
样例2:NOT UNIQUE
样例3:NO

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; public class Main {
// 转自: https://blog.csdn.net/a1439775520
static int l;
static int n;
static int ans=0;
static int len;
static char[] s;
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter wr=new BufferedWriter(new OutputStreamWriter(System.out));
String []nm=br.readLine().split(" ");
l=Integer.parseInt(nm[0]);
n=Integer.parseInt(nm[1]);
s=br.readLine().toCharArray();
// wr.write(Arrays.toString(s));
len=s.length;
dfs(0,0,0);
//wr.write(ans+" ");
//wr.write(" "+l+" "+n+" "+len);
if(ans>=2){
wr.write("NOT UNIQUE");
}
else if(ans==1)
{
wr.write("YES");
}
else
{
wr.write("NO");
}
wr.close();
}
static void dfs(int i,int num,int curlen)
{
if(ans>=2||num>n||curlen>l){return;}
if(i>=len)
{
if(curlen==l&&num==n)
{
ans++;
}
return;
}
if(s[i]=='0')
{
dfs(i+1,num,curlen+1);
return;
}
if(i!=0&&s[i-1]=='1')
{
dfs(i+1,num+1,curlen+1);
return;
}
dfs(i+1,num+1,curlen+1);
int tem=0;
for (int j=i;j<len;j++)
{
//
tem*=2;
tem+=s[j]-'0';
if (tem+num>n||tem+curlen>l)
{
break;
}
if(tem>j-i+1&&(j+1==len||(j+1<len&&s[j+1]=='0')))
{dfs(j+1,num+tem,tem+curlen);}
} }
}

Java实现 蓝桥杯 算法训练 Bit Compressor(暴力)的更多相关文章

  1. Java实现 蓝桥杯 算法训练 画图(暴力)

    试题 算法训练 画图 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色. 下图给出了一个画了两个矩 ...

  2. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

  3. Java实现蓝桥杯 算法训练 大等于n的最小完全平方数

    试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...

  4. java实现 蓝桥杯 算法训练 Password Suspects

    问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...

  5. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  6. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  7. Java实现 蓝桥杯 算法训练 审美课

    算法训练 审美课 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师 ...

  8. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  9. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

随机推荐

  1. 使用JDBC操作MySQL

    使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...

  2. AXI总线slave模式下接收数据---verilog代码

    AXI总线slave模式下接收数据---verilog代码 `timescale 1ns / 1ps ///////////////////////////////////////////////// ...

  3. python监听、操作键盘鼠标库pynput详细教程

    § 0.0.0 前言 监听.操作鼠标.键盘是实现自动化的捷径,比如我实现自动化签到用到了模拟键盘操作. pynput是监听.操控鼠标和键盘的跨平台第三方python库. 你可以通过pip insnal ...

  4. .Net(c#)使用 Kafka 小结

    .Net(c#)使用 Kafka 小结 1.开篇 由于项目中必须使用 kafka 来作为消息组件,所以使用 kafka 有一段时间了.不得不感叹 kafka 是一个相当优秀的消息系统.下面直接对使用过 ...

  5. spark机器学习从0到1机器学习工作流 (十一)

        一.概念 一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出.这非常类似于流水线式工作,即通常会包含源数据ETL(抽取.转化.加载),数据预处理,指标提取,模型训练与交叉 ...

  6. ShoneSharp语言(S#)的设计和使用介绍系列(8)— 最炫“公式”风

    ShoneSharp语言(S#)的设计和使用介绍 系列(8)— 最炫“公式”风 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/ShoneSha ...

  7. sqoop-介绍及安装

    1.sqoop概述 sqoop是Apache旗下一款hadoop和关系数据库服务器之间传送数据的工具: 核心的功能: 导入,迁入(从关系型数据库-->hdfs hive hbase) 导出,迁出 ...

  8. PHP 调用qq邮箱接口

    html代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  9. vue触发事件的五个关键字

    v-on    vue中提供了v-on事件绑定    v-on:click='函数';    v-on可以使用@代替 vue  五个触发事件关键字    .stop 用于阻止冒泡    例如 div1 ...

  10. net core获取appsetting.json的另外一种思路(全局,实时变化无需重启项目)

    最近在写net core的项目,在非controller和service里面需要用到appsetting.json文件里面的一些配置,查资料大概有几种思路: 注入,然后config.GetSectio ...