Submission #1067009

#TimeUsernameProblemLanguageResultExecution timeMemory
1067009heeewGardening (RMI21_gardening)C++14
100 / 100
17 ms5392 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...