# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
774185 | shoryu386 | Mobitel (COCI19_mobitel) | C++17 | 4498 ms | 65536 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define MAX 307
#define MOD 1000000007
int r, c, n;
map<int, int> smolbrain[MAX][MAX];
int arr[MAX][MAX];
inline int submod(int reeee){
if (reeee >= MOD) return reeee-MOD;
else return reeee;
}
main(){
cin >> r >> c >> n;
for (int x = 0; x < r; x++){ for (int y = 0; y < c; y++) cin >> arr[x][y];}
smolbrain[0][0][arr[0][0]] = 1;
int cringe[MAX][MAX];
for (int x = 0; x < r; x++) cringe[x][0] = 1;
for (int x = 0; x < c; x++) cringe[0][x] = 1;
for (int y = 1; y < r; y++){
for (int x = 1; x < c; x++){
cringe[y][x] = submod(cringe[y-1][x] + cringe[y][x-1]);
}
}
for (int y = 0; y < r; y++){
for (int x = 0; x < c; x++){
if (y < r-1){
for (auto i : smolbrain[y][x]){
if ((long long)i.first * (long long)arr[y+1][x] < n) smolbrain[y+1][x][ i.first * arr[y+1][x] ] = submod(smolbrain[y+1][x][ i.first * arr[y+1][x] ] + i.second);
}
}
if (x < c-1){
for (auto i : smolbrain[y][x]){
if ((long long)i.first * (long long)arr[y][x+1] < n) smolbrain[y][x+1][ i.first * arr[y][x+1] ] = submod(smolbrain[y][x+1][ i.first * arr[y][x+1] ] + i.second);
}
}
if (y != r-1 || x != c-1) smolbrain[y][x].clear();
}
}
/*
for (int y = 0; y < r; y++){
for (int x = 0; x < c; x++){
cout << "DEBUG FOR " << y << ' ' << x << '\n';
for (auto i : smolbrain[y][x]){
cout << i.first << ' ' << i.second << '\n';
}
}
}
*/
int presum = 0;
for (auto i : smolbrain[r-1][c-1]){
presum = submod(presum + i.second);
}
cout << (cringe[r-1][c-1] - presum + MOD)%MOD;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |