제출 #1035311

#제출 시각아이디문제언어결과실행 시간메모리
1035311alexander707070Red-blue table (IZhO19_stones)C++17
100 / 100
38 ms2260 KiB
#include<bits/stdc++.h> #define MAXN 1007 using namespace std; int te,n,m,r,b,best; int br[MAXN]; pair<int,int> p[MAXN]; char t[MAXN][MAXN]; void construct(int rows,int cols,int r,int b){ int lim=rows-b; for(int i=1;i<=rows;i++)br[i]=0; for(int f=1;f<=cols;f++){ for(int i=1;i<=rows;i++){ p[i]={br[i],i}; } sort(p+1,p+rows+1); for(int i=1;i<=lim;i++){ t[p[i].second][f]='+'; br[p[i].second]++; } for(int i=lim+1;i<=rows;i++){ t[p[i].second][f]='-'; } } } void build(int a,int b){ for(int i=a+1;i<=n;i++){ for(int f=1;f<=m;f++){ t[i][f]='-'; } } for(int f=b+1;f<=m;f++){ for(int i=1;i<=n;i++){ t[i][f]='+'; } } construct(a,b,max(0, (m/2+b-m)+1 ) , max(0, (n/2+a-n)+1) ); } bool ok(int A,int B){ int reds=max(0, A* ((m/2+B-m)+1)); int blues=max(0, B* ((n/2+A-n)+1)); return reds+blues<=A*B; } void solve(){ cin>>n>>m; int B=m,A=n; best=0; for(A=0;A<=n;A++){ while(B>0 and !ok(A,B))B--; if(A+B>best){ best=A+B; r=A; b=B; } } build(r,b); cout<<best<<"\n"; for(int i=1;i<=n;i++){ for(int f=1;f<=m;f++){ cout<<t[i][f]; } cout<<"\n"; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>te; while(te>0){ solve(); te--; } 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...