Pagini recente » Cod sursa (job #2259379) | Cod sursa (job #1642528) | Cod sursa (job #399249) | Cod sursa (job #3212162) | Cod sursa (job #2270280)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin ("mexitate.in" );
ofstream fout ("mexitate.out");
const int N = 400001, MOD = 1000000007;
int F[N];
int main ()
{
int n, m, k, l;
fin >> n >> m >> k >> l;
vector <int> pq;
if ( n > m )
{
n += m;
m = n - m;
n = n - m;
k += l;
l = k - l;
k = k - l;
}
int A[n+1][m+1];
for ( int i = 1; i <= n; i++ )
{
for ( int j = 1; j <= m; j++ )
{
fin >> A[i][j];
}
}
int prod = 1;
for ( int i = 1; i <= k; i++ )
{
for ( int j = 1; j <= l; j++ )
{
F[A[i][j]] ++;
}
}
for ( int i = 1; i <= n*m; i++ )
{
if ( F[i] == 0 )
{
prod *= i;
prod %= MOD;
cout << i << " ";
break;
}
}
int a = 1, b = l, c;
bool d = true;
if (( n - k ) % 2 == 0 )
{
c = m;
d = false;
}
else
{
c = l;
d = true;
}
bool ok = true;
while ( !( a == n - k + 1 && b == c ))
{
if ( ok && b < m )
{
b++;
for ( int r = a; r < a + k; r++ )
{
F[A[r][b-l]] --;
F[A[r][b]] ++;
}
}
else
{
if ( ok && b == m )
{
ok = false;
a++;
for ( int r = b - l + 1; r <= m; r++ )
{
F[A[a-1][r]] --;
F[A[a+k-1][r]] ++;
}
}
else
{
if ( !ok && b > l )
{
b--;
for ( int r = a; r > a + k; r++ )
{
F[A[r][b+1]]-- ;
F[A[r][b-l+1]] ++;
}
}
else
{
if ( !ok && b == l)
{
a++;
ok = true;
for ( int r = 1; r <= l; r++ )
{
F[A[a-1][r]] --;
F[A[a+k-1][r]] ++;
}
}
}
}
}
for ( int i = 1; i <= n*m; i++ )
{
if ( F[i] == 0 )
{
prod *= i;
prod %= MOD;
cout << i <<" ";
break;
}
}
cout << F[4] << " ";
}
fout << prod;
return 0;
}