이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
using lint = long long;
using vint = vector<int>;
using pii = pair<int,int>;
const int CUTLINE=4500;
const int MAX_N=200010;
vint ans;
vint ns,ms;
vector<vector<vint>> a;
void sqr(int s,int e,int l,int r,int c)
{
for(int i=s;i<e;i++)
for(int j=l;j<r;j++)
a.back()[i][j]=c;
}
void fillmp(int s,int e,int l,int r,int c)
{
int n=(e-s)/2,m=(r-l)/2;
while(c!=n*m)
{
if(c-1<=(n-1)*(m-1)-2 || c-1==(n-1)*(m-1))
{
sqr(s,e,l,l+1,c);
sqr(s,e,r-1,r,c);
sqr(s,s+1,l,r,c);
sqr(e-1,e,l,r,c);
s++,e--,l++,r--,c--;
}
else if(n>m)
{
for(int j=0;j<m;j++)
sqr(s,s+2,l+j*2,l+j*2+2,c--);
s+=2;
}
else
{
for(int i=0;i<n;i++)
sqr(s+i*2,s+i*2+2,l,l+2,c--);
l+=2;
}
n=(e-s)/2,m=(r-l)/2;
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
sqr(s+i*2,s+i*2+2,l+j*2,l+j*2+2,c--);
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int T;
cin >> T;
ans.resize(T);
ns.resize(T);
ms.resize(T);
for(int t=0;t<T;t++)
{
int n,m,k;
cin >> n >> m >> k;
a.push_back({});
if(n%2 || m%2)
continue;
if(k>n*m/4 || k==n*m/4-1 || k<max(n,m)/2 || (n==m && k==n/2+1))
continue;
ans[t]=1,ns[t]=n,ms[t]=m;
a.back().resize(n);
for(int i=0;i<n;i++)
a.back()[i].resize(m);
fillmp(0,n,0,m,k);
}
for(int t=0;t<T;t++)
{
if(!ans[t])
{
cout << "NO\n";
continue;
}
cout << "YES\n";
int n=ns[t],m=ms[t];
for(int i=0;i<n;i++,cout << '\n')
for(int j=0;j<m;j++)
cout << a[t][i][j] << ' ';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |