提交时间:2026-06-17 06:36:21
运行 ID: 91811
#include <iostream> #include <vector> using namespace std; const int MOD = 100000007; int main() { long long n, s, a, b; cin >> n >> s >> a >> b; long long k = n - 1; long long T = k * (k + 1) / 2; long long D = a + b; long long C = s + b * T; // DP:dp[j] 表示选出数字和为j的方案数 vector<long long> dp(T + 1, 0); dp[0] = 1; for (long long i = 1; i <= k; ++i) { for (long long j = T; j >= i; --j) { dp[j] = (dp[j] + dp[j - i]) % MOD; } } long long ans = 0; for (long long sumA = 0; sumA <= T; ++sumA) { // 判断 (D * sumA - C) % n == 0 long long left = (D % n) * (sumA % n) % n; long long right = C % n; if (left < 0) left += n; if (right < 0) right += n; if (left == right) { ans = (ans + dp[sumA]) % MOD; } } cout << ans % MOD << endl; return 0; }