1 条题解
-
0
题目描述
我们需要计算第二类Stirling数的奇偶性,即。第二类Stirling数表示将个元素的集合划分为个非空子集的方式数。题目给出了,直接计算显然不可行,因此需要找到的规律或数学性质。
解题思路
-
第二类Stirling数的递推关系:
- ()
- ()
- ()
-
模2的性质:
- 在模2下,的奇偶性取决于和的奇偶性。
- 如果是偶数,则。
- 如果是奇数,则。
-
数学性质:
- 通过观察或数学推导,可以发现的值与组合数的奇偶性有关。
- 具体来说,等于,其中。
- 根据Lucas定理,组合数为1当且仅当的二进制表示是的二进制表示的子集。
-
结论:
- 设,。
- 如果,则,否则为0。
- 用位运算表示为:。
#include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <queue> #include <map> #include <vector> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; const int maxn = 1050; const ll INF = (1LL << 62) - 1; const ll mod = 998244353; const double eps = 1e-8; int t; ll n, m; int main() { scanf("%d", &t); while(t--) { scanf("%lld%lld", &n, &m); if(n == 0 && m == 0) {printf("1\n"); continue;} if(n == 0 || m == 0 || n < 0) {printf("0\n"); continue;} ll a = n - m, b = (m + 1)/2; if(((a+b-1) & (b-1)) == (b-1)) printf("1\n"); else printf("0\n"); } return 0; }
-
- 1
信息
- ID
- 431
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者