[Easy] CF1832E Combinatorics Problem
2025/2/17约 406 字大约 2 分钟
简要题意
给定一个长度为 的序列 和一个参数 ,你需要求出一个长度为 的序列 ,满足:
。
思路
记 表示当 时的答案,则:
直接递推,边界 。
时间复杂度 。
代码
#include <bits/stdc++.h>
using namespace std;
constexpr int mod = 998244353;
int Add(int x, int y){ return (x + y) >= mod ? (x + y - mod) : (x + y); }
int Sub(int x, int y){ return (x - y) < 0 ? (x - y + mod) : (x - y); }
int Mul(int x, int y){ return 1ll * x * y % mod; }
const int N = 1e7 + 5;
int a[N], b[N][6], n, k;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int x, y, m; cin >> n >> a[1] >> x >> y >> m >> k;
for(int i=2;i<=n;i++) a[i] = (1ll * a[i - 1] * x + y) % m;
for(int i=1;i<=n;i++) b[i][0] = Add(b[i - 1][0], a[i]);
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
if(j == 1) b[i][j] = a[i];
b[i][j] = Add(b[i][j], Add(b[i - 1][j], b[i - 1][j - 1]));
}
}
long long ans = 0;
for(int i=1;i<=n;i++) ans ^= 1ll * i * b[i][k];
cout << ans << '\n';
return 0;
}
// Written by xiezheyuan