제출 #1354536

#제출 시각아이디문제언어결과실행 시간메모리
1354536NewtonabcRed-blue table (IZhO19_stones)C++20
100 / 100
38 ms2252 KiB
#include<bits/stdc++.h>
using namespace std;
bool mi[1010][1010];
void solve(){
    int n,m; cin>>n >>m;
    for(int i=0;i<n;i++) for(int j=0;j<m;j++) mi[i][j]=0;
    int ans=-1,pa=67;
    for(int ca=0;ca<=n;ca++){
        //int lt=(n-ca)*m+ca*((m-1)/2);
        int lt=ca*((m-1)/2);
        int cost=((n+2)/2)-(n-ca);
        int got=min(m,cost<=0?INT_MAX:lt/cost);
        if(ca+got>ans){
            ans=ca+got;
            pa=ca;
        }
    }
    set<pair<int,int>> s;
    for(int i=0;i<pa;i++){
        s.insert({(m-1)/2,i});
    }
    for(int i=0;i<ans-pa;i++){
        int need=((n+2)/2)-(n-pa);
        vector<pair<int,int>> bk;
        for(int j=0;j<need;j++){
            auto it=s.end();
            it--;

            mi[it->second][i]=1;
            auto p=*it;
            p.first--;
            if(p.first!=0) bk.push_back(p);
            s.erase(it);
        }
        for(auto p:bk) s.insert(p);
    }
    cout<<ans <<"\n";
    queue<int> q;
    for(int i=0;i<pa;i++){
        for(int j=0;j<m;j++){
            if(mi[i][j]) cout<<"-";
            else cout<<"+";
        }
        cout<<"\n";
    }
    for(int i=pa;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<"-";
        }
        cout<<"\n";
    }
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t; cin>>t;
    while(t--){
        solve();
    }
}
#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...