1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <bits/stdc++.h> using namespace std;
static const int N = 1000; long long tri[N][N]; long long prefix[N + 1][N + 1];
int main() { long long t = 0; const long long MOD = 1LL << 20; for (int i = 0, k = 1; i < N; i++) { for (int j = 0; j <= i; j++, k++) { t = (615949 * t + 797807) & (MOD - 1); tri[i][j] = t - 219; } }
for (int i = 0; i < N; i++) { prefix[i][0] = tri[i][0]; for (int j = 1; j <= i; j++) { prefix[i][j] = prefix[i][j - 1] + tri[i][j]; } }
long long globalMin = LLONG_MAX;
for (int i = 0; i < N; i++) { for (int j = 0; j <= i; j++) { long long currSum = 0;
for (int h = 0; i + h < N; h++) { currSum += prefix[i + h][j + h] - (j > 0 ? prefix[i + h][j - 1] : 0);
if (currSum < globalMin) globalMin = currSum; } } }
cout << globalMin << endl; return 0; }
|