贡献题解

梁乃元  •  2个月前


先读题

传送门

1. 输入

很简单,就不讲了

	int n ;
	cin >> n ;

2. 处理

∵ 每个元素可以选或者不选 ∴ 总共循环2^n( 1 << n ),且每次的i的二进制第j位对应第j个元素选或不选的状态( 0 / 1 ) 可以设置一个函数来获取子集

string out ( int x )
{
	string ans = "(" ;
	for ( int i = 0 ; i < n ; i ++ )
	{
		if ( ( 1 << i ) & x )
		{
			ans += char ( i + 'a' ) ;
		}
	}
	ans += ')' ;
	return ans ;
}

3. 输出

输出所有子集,每个子集占一行,按字典序排序。

∴ 要对获得的答案进行排序

	sort ( s + 1 , s + ( 1 << n ) ) ; // s是上面处理后的答案组成的字符串数组

最后输出即可

	for ( int i = 1 ; i < ( 1 << n ) ; i ++ )
	{
		cout << s [i] << endl ;
	}

AC纪录放上

END

抄代码可耻,抄袭题解更可耻!


评论:

管理员支持一下


梁乃元  •  2个月前