Last active 1731076325

Revision 7881c4264087535a6fbd595313a2f144b0db4437

variantsCount.cpp Raw
1#include <bits/stdc++.h>
2using namespace std;
3#define ll long long
4
5long variantsCount(int n, long long s0, long long k, long long b, long long m, long long a) {
6 // Generate all n side lengths
7 vector<long long> sides(n);
8 sides[0] = s0;
9 for (int i = 1; i < n; i++) {
10 sides[i] = ((k * sides[i - 1] + b) % m) + 1 + sides[i - 1];
11 }
12
13 // Sort sides for binary search
14 sort(sides.begin(), sides.end());
15 int count = 0;
16
17 // Use binary search to count pairs
18 for (int i = 0; i < n; i++) {
19 long long max_side = a / sides[i];
20 // Find the position where sides[j] exceeds max_side
21 auto j = upper_bound(sides.begin(), sides.end(), max_side) - sides.begin();
22 count += j; // All elements in sides[0:j] are valid for sides[i] * sides[j] <= a
23 }
24
25 return count;
26}
27
28int main() {
29 int n = 5;
30 long long s0 = 3, k = 2, b = 1, m = 100, a = 100;
31
32 int result = variantsCount(n, s0, k, b, m, a);
33 cout << result << endl;
34
35 return 0;
36}
37