# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
28461 | 슈퍼스타 tlwpdus (#68) | Oriental P.A.D.A.K (FXCUP2_padak) | C++11 | 356 ms | 19184 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;
typedef pair<int,int> pii;
int n, m, k, b, z;
bool visit[1000100];
int cnt[1000100], tcnt[1000100];
int px[] = {1,0,-1,0}, py[] = {0,1,0,-1};
bool ok(int x, int y) {
return x>=0&&x<n&&y>=0&&y<m;
}
int main() {
int i;
scanf("%d%d%d%d%d",&n,&m,&k,&b,&z);
queue<pii> qu;
for (i=0;i<k;i++) {
int a, b;
scanf("%d%d",&a,&b); --a; --b;
qu.push(pii(0,a*m+b)); visit[a*m+b] = 1;
}
int md = 0;
while(!qu.empty()) {
pii tmp = qu.front(); qu.pop();
int here = tmp.second, d = tmp.first;
cnt[d]++; tcnt[d]++; md = max(md,d);
int x = here/m, y = here%m;
for (i=0;i<4;i++) {
int nx = x+px[i], ny = y+py[i];
if (!ok(nx,ny)||visit[nx*m+ny]) continue;
qu.push(pii(d+1,nx*m+ny)); visit[nx*m+ny] = 1;
}
}
int maxi = 0; int q = 1;
for (i=0;i<=md;i++) {
q = max(q,i+1);
int rem = z;
while(q<=md&&rem) {
int v = min(rem,cnt[q]);
rem -= v;
cnt[q] -= v;
maxi += v;
if (!cnt[q]) q++;
}
}
for (i=0;i<=md;i++) cnt[i] = tcnt[i];
int mini = 0; q = md;
for (i=0;i<=md;i++) {
int rem = z;
while(q>i&&rem) {
int v = min(rem,cnt[q]);
cnt[q] -= v;
rem -= v;
mini += v;
if (!cnt[q]) q--;
}
}
printf("%d %d\n",mini,maxi);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |