9.24 总结

T1 集合

给定正整数 \(n\),计算 \(n\) 个元素的集合 \({1,2,⋯,n}\),所有非空子集和的乘积取模 \(998244353\) 后的结果。

首先,一个大小为 \(n\) 的集合有 \(2^n - 1\) 个非空子集,考虑dp求得每一种答案的数量,然后根据欧拉定理可求得答案。

代码:

#include <fstream>

using namespace std;
using ll = long long;

const int kMaxN = 1e5 + 1, kMod = 998244353;

ifstream cin("set.in");
ofstream cout("set.out");

ll n, ans = 1, num[kMaxN];

ll fpow(ll a, ll b) {
  ll res = 1;
  for (; b; (b & 1) && (res = res * a % kMod), b >>= 1, a = a * a % kMod) {
  }
  return res;
}

int main() {    
  cin >> n;
  num[0] = 1;
  for (ll i = 1; i <= n; i++) {
    for (ll j = i * (i + 1) / 2; j >= i; j--) {
      num[j] = (num[j] + num[j - i]) % (kMod - 1);
    }
  }
  for (ll i = 1; i <= n * (n + 1) / 2; i++) {
    ans = ans * fpow(i, num[i]) % kMod;
  }
  cout << ans << '\n';
  return 0;
}

T2 出租

考虑什么时候是无解的。

当出现任意一段区间 \([l, r]\) 的租户满足他们的人数

posted @ 2024-09-24 17:23  GenesisCrystal  阅读(42)  评论(0)    收藏  举报