UVa 496 Simply Subsets (STL&set_intersection)

本文介绍了C++标准库中<algorithm>头文件的集合运算函数,并通过一个示例程序展示了如何使用这些函数来判断两个集合之间的关系,如子集、相等或互斥等。

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=437


先介绍<algorithm>头文件中与集合运算有关的4个函数:


很明显,这里要判断两个集合的关系,使用交集来判断就行了。

使用方法:

set_intersection(a, a + n, b, b + m, v.begin());
这里v是动态数组,用于保存交运算结果。(其他函数的使用方法均与之类似)

该函数的返回值减去v.begin()就是集合的大小。

完整代码:

/*0.016s*/

#include<bits/stdc++.h>
using namespace std;

int a[100], b[100];
vector<int> v(100);///初始化空间是必须的

int main()
{
	int n, m, cnt, diff;
	char ch;
	while (~scanf("%d%c", &a[0], &ch))
	{
		for (n = 1; ch != 10; ++n)
			scanf("%d%c", &a[n], &ch);
		cnt = scanf("%d%c", &b[0], &ch);
		for (m = 1; ch != 10 && cnt == 2; ++m)
			cnt = scanf("%d%c", &b[m], &ch);
		sort(a, a + n);
		sort(b, b + m);
		diff = set_intersection(a, a + n, b, b + m, v.begin()) - v.begin();
		if (diff == min(n, m))
		{
			if (n < m) puts("A is a proper subset of B");
			else if (n > m) puts("B is a proper subset of A");
			else puts("A equals B");
		}
		else if (diff) puts("I'm confused!");
		else puts("A and B are disjoint");
	}
	return 0;
}

出问题了enum rate_set_5g_20m_ext4 { RATE_SET_5G_20M_EXT4_0 = 0, RATE_SET_5G_20M_EXT4_1 = 1, RATE_SET_5G_20M_EXT4_2 = 2, RATE_SET_5G_20M_EXT4_3 = 3, RATE_SET_5G_20M_EXT4_4 = 4, RATE_SET_5G_20M_EXT4_5 = 5, RATE_SET_5G_20M_EXT4_6 = 6, RATE_SET_5G_20M_EXT4_7 = 7, RATE_SET_5G_20M_EXT4_8 = 8, RATE_SET_5G_20M_EXT4_9 = 9, RATE_SET_5G_20M_EXT4_10 = 10, RATE_SET_5G_20M_EXT4_11 = 11, RATE_SET_5G_20M_EXT4_12 = 12, RATE_SET_5G_20M_EXT4_13 = 13, RATE_SET_5G_20M_EXT4_14 = 14, RATE_SET_5G_20M_EXT4_15 = 15, RATE_SET_5G_20M_EXT4_16 = 16, RATE_SET_5G_20M_EXT4_17 = 17, RATE_SET_5G_20M_EXT4_18 = 18, RATE_SET_5G_20M_EXT4_19 = 19, RATE_SET_5G_20M_EXT4_20 = 20, RATE_SET_5G_20M_EXT4_21 = 21, RATE_SET_5G_20M_EXT4_22 = 22, RATE_SET_5G_20M_EXT4_23 = 23, RATE_SET_5G_20M_EXT4_24 = 24, RATE_SET_5G_20M_EXT4_25 = 25, RATE_SET_5G_20M_EXT4_26 = 26, RATE_SET_5G_20M_EXT4_27 = 27, RATE_SET_5G_20M_EXT4_28 = 28, RATE_SET_5G_20M_EXT4_29 = 29, RATE_SET_5G_HT_20M_EXT4_11a = 32, RATE_SET_5G_HT_20M_EXT4_11n = 33, RATE_SET_5G_HT_20M_EXT4_11ac = 34, RATE_SET_5G_HT_20M_EXT4_11ax = 35, RATE_SET_5G_HT_20M_EXT4_11be = 36添加进去的枚举索引都是32开始,而日志发现块: RATE_SET_5G_HT_20M_EXT4_11a, 预期数量=16 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_20M_EXT4_11n, 预期数量=72 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_20M_EXT4_11ac, 预期数量=32 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_20M_EXT4_11ax, 预期数量=96 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_20M_EXT4_11be, 预期数量=20 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 共提取 5 个有效子集 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 30 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 构建完成:共 5 个新条目(保留原始格式) 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作... 2025-10-28 20:29:31,896 [INFO] __main__.RateSetSynchronizer: ... 2025-10-28 20:29:31,903 [INFO] __main__.RateSetSynchronizer: 生成新的 index values: ['2808', '2825', '2898', '2931', '3028']又是对的
10-29
def build_injection_with_format(self, new_subsets: List[Dict], existing_enum: Dict[str, int]) -> List[Dict]: """ 返回需要注入的原始块列表(包含 raw_header + raw_body) 不再返回 new_data/new_indices/new_enums """ valid_blocks = [] next_enum_value = max(existing_enum.values(), default=-1) + 1 self.logger.info(f"开始构建注入内容,当前最大枚举值 = {next_enum_value}") for subset in new_subsets: enum_name = subset["name"] if enum_name in existing_enum: self.logger.info(f"跳过已存在的枚举项: {enum_name} = {existing_enum[enum_name]}") continue # 只保存必要信息,不计算偏移 valid_blocks.append({ "enum_name": enum_name, "raw_header": subset["raw_header"], "raw_body": subset["raw_body"], "count": subset["count"], # 用于计算 data 占用空间 }) self.logger.debug(f" 准备注入: {enum_name}") self.logger.info(f"新增条目: {enum_name} enum={next_enum_value}") self.logger.info(f"构建完成:共 {len(valid_blocks)} 个新条目(保留原始格式)") return valid_blocks你看代码是这样日志是这样2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_160M_EXT4_11ac, 预期数量=120 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_160M_EXT4_11ax, 预期数量=96 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 🔍 发现块: RATE_SET_5G_HT_160M_EXT4_11be, 预期数量=20 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 共提取 3 个有效子集 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 12 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 新增条目: RATE_SET_5G_HT_160M_EXT4_11ac enum=12 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 新增条目: RATE_SET_5G_HT_160M_EXT4_11ax enum=12 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 新增条目: RATE_SET_5G_HT_160M_EXT4_11be enum=12 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 构建完成:共 3 个新条目(保留原始格式) 2025-10-28 20:42:35,759 [INFO] __main__.RateSetSynchronizer: 开始执行局部块写入操作...但是写出来枚举却是enum rate_set_5g_160m_ext4 { RATE_SET_5G_160M_EXT4_0 = 0, RATE_SET_5G_160M_EXT4_1 = 1, RATE_SET_5G_160M_EXT4_2 = 2, RATE_SET_5G_160M_EXT4_3 = 3, RATE_SET_5G_160M_EXT4_4 = 4, RATE_SET_5G_160M_EXT4_5 = 5, RATE_SET_5G_160M_EXT4_6 = 6, RATE_SET_5G_160M_EXT4_7 = 7, RATE_SET_5G_160M_EXT4_8 = 8, RATE_SET_5G_160M_EXT4_9 = 9, RATE_SET_5G_160M_EXT4_10 = 10, RATE_SET_5G_160M_EXT4_11 = 11, RATE_SET_5G_HT_160M_EXT4_11ac = 32, RATE_SET_5G_HT_160M_EXT4_11ax = 33, RATE_SET_5G_HT_160M_EXT4_11be = 34,
10-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值