字符串系列——Immediate Decodability

本文介绍了一种算法,用于判断一组二进制编码的符号集是否立即可解码,即任一符号的编码都不是其他符号编码的前缀。通过示例说明了立即可解码的概念,并提供了一段C++代码实现。
部署运行你感兴趣的模型镜像

 Immediate Decodability 

An encoding of a set of symbols is said to be immediately decodable if no code for one symbol is the prefix of a code for another symbol. We will assume for this problem that all codes are in binary, that no two codes within a set of codes are the same, that each code has at least one bit and no more than ten bits, and that each set has at least two codes and no more than eight.


Examples: Assume an alphabet that has symbols {A, B, C, D}


The following code is immediately decodable:


A:01 B:10 C:0010 D:0000


but this one is not:


A:01 B:10 C:010 D:0000 (Note that A is a prefix of C)

Input 

Write a program that accepts as input a series of groups of records from a data file.Each record in a group contains a collection of zeroes and ones representing a binary code for a different symbol. Each group is followed by a single separator record containing a single 9; the separator records are not part of the group. Each group is independent of other groups; the codes in one group are not related to codes in any other group (that is, each group is to be processed independently).

Output 

For each group, your program should determine whether the codes in that groupare immediately decodable, and should print a single output line giving the group number and stating whether the group is, or is not, immediately decodable.


The Sample Input describes the examples above.

Sample Input 

01
10
0010
0000
9
01
10
010
0000
9

Sample Output 

Set 1 is immediately decodable
Set 2 is not immediately decodable

托了好久才又继续刷题,电脑终于买过来了。。。。

废话不说,看题。。。

字符串系列还没刷完,我真是退步了,最近没刷都有点生疏了。。。

题就是判断所给10串里面有没有某个串是另一串的前缀。

本来思路是截取字符串再对比,不过老是实现不了,字符串这部分有空得复习复习了。。。

后来看网上人家用了一个非常方便的办法,就是strstr函数,判断一个字符串是否包含在另一个字符串里面,返回第一个字符的地址,然后与其第一个字符地址对比

代码大大缩短了。。。


代码(未AC):

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
	int cnt = 1;
	while (1)
	{
		char ch[100][100], tmp;
		int n = 0;

		for (int i = 0; cin >> ch[i]; i++)
		{
			if (strcmp(ch[i], "9") == 0)
				break;
			n++;
		}

		bool jd = true;
		for (int i = 0; i < n; i++)
			for (int j = i + 1; j < n; j++)
				if (strstr(ch[i], ch[j]) == &ch[i][0] || strstr(ch[j], ch[i]) == &ch[j][0])
				{
					jd = false;
					break;
				}

		if (jd)
			cout << "Set " << cnt++ << " is immediately decodable" << endl;
		else
			cout << "Set " << cnt++ << " is not immediately decodable" << endl;
	}
	return 0;
}

Time limit exceeded。。。

测试是没有错误的,但是我检查后发现一个问题就是这程序没有退出点。。。

修改后AC了。。。

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
	int cnt = 1;
	char temp[100];
	while (cin >> temp)
	{
		if (temp[0] == '9')
			break;
		char ch[100][100], tmp;
		int n = 1;
		strcpy(ch[0], temp);

		for (int i = 1; cin >> ch[i]; i++)
		{
			if (strcmp(ch[i], "9") == 0)
				break;
			n++;
		}
		bool jd = true;
		for (int i = 0; i < n; i++)
			for (int j = i + 1; j < n; j++)
				if (strstr(ch[i], ch[j]) == &ch[i][0] || strstr(ch[j], ch[i]) == &ch[j][0])
				{
					jd = false;
					break;
				}

		if (jd)
			cout << "Set " << cnt++ << " is immediately decodable" << endl;
		else
			cout << "Set " << cnt++ << " is not immediately decodable" << endl;
		memset(temp, 0, sizeof(temp));
	}
	return 0;
}

各种不容易啊,有空要多刷了,不能停了。。。。



您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 关于达梦数据库执行字符串的相关信息 在达梦数据库中,可以通过动态SQL的方式执行字符串。动态SQL允许用户在运行时构建和执行SQL语句。达梦数据库支持使用 `EXECUTE IMMEDIATE` 或 `DBMS_SQL` 包来执行动态SQL字符串[^1]。 以下是一个使用 `EXECUTE IMMEDIATE` 的示例: ```sql DECLARE sql_str VARCHAR2(200); BEGIN sql_str := 'CREATE TABLE test_table (id INT, name VARCHAR2(50))'; EXECUTE IMMEDIATE sql_str; END; ``` 上述代码中,`sql_str` 是一个包含SQL语句的字符串变量,通过 `EXECUTE IMMEDIATE` 执行该字符串中的SQL语句。此方法适用于简单的动态SQL操作[^1]。 对于更复杂的动态SQL操作,可以使用 `DBMS_SQL` 包。以下是一个示例: ```sql DECLARE cur INTEGER; sql_str VARCHAR2(200); rows INTEGER; BEGIN sql_str := 'SELECT COUNT(*) FROM test_table WHERE id > :1'; cur := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(cur, sql_str, DBMS_SQL.NATIVE); DBMS_SQL.BIND_VARIABLE(cur, ':1', 10); rows := DBMS_SQL.EXECUTE(cur); DBMS_SQL.CLOSE_CURSOR(cur); END; ``` 在这个例子中,`DBMS_SQL` 包被用来执行一个带有绑定变量的查询语句。通过这种方式,可以实现更加灵活的动态SQL操作[^1]。 需要注意的是,在使用动态SQL时,必须确保字符串的安全性,避免SQL注入攻击。此外,字符串常量需要使用英文单引号 `'` 括起来,区分大小写[^1]。 ### 注意事项 - 动态SQL字符串可以是常量、变量、函数返回值或表达式的结果。 - 在构建动态SQL字符串时,应特别注意拼接逻辑,确保生成的SQL语法正确。 - 如果涉及参数传递,建议使用绑定变量以提高性能和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值