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>
#define f first
//#define int long long
#define s second
#define pii pair<int,int>
using namespace std;
const int N=1e3+5,mod=1e9+7;
int t,n,m,red[N];
char a[N][N];
set<pii> s;
main(){
// t=1;
cin >> t;
while(t--){
cin>>n>>m;
for(int i=1;i<=m;i++) red[i] = 0;
int B = m;
int ans = B,cnt=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) a[i][j]='-';
}
for(int i=1;i<=n;i++){
s.clear();
int c = 0,all = (i-1)*(m/2+1);
for(int j=1;j<=m;j++) {
if(red[j] >= (n+1)/2) c++;
}
int C=m-c;
for(int j=1;j<=m;j++) {
if(c) {
red[j] = min(all,i-1);
all-=min(all,i-1);
c--; }
else {
red[j] = all/C; if(all%C)all--, red[j]++; }
s.insert({red[j],j});
}
for(int j=1;j<=m/2+1;j++) {
pii c = *--s.end();
if(c.f>=(n+1)/2) red[c.s]++,s.erase(c);
else {
pii c = *s.begin();
s.erase(c);
if(c.f+1==(n+1)/2) B--; red[c.s]++; }
}
if(i+B>ans) ans=i+B,cnt=i;
}
cout<<ans<<endl;
s.clear();
for(int i=1;i<=m;i++) red[i] = 0;
for(int i=1;i<=cnt;i++){
s.clear();
int c = 0,all = (i-1)*(m/2+1);
for(int j=1;j<=m;j++) {
if(red[j] >= (n+1)/2) c++;
}
int C=m-c;
for(int j=1;j<=m;j++) {
if(c) {
red[j] = min(all,i-1);
all-=min(all,i-1);
c--; }
else {
red[j] = all/C; if(all%C)all--, red[j]++; }
s.insert({red[j],j});
}
for(int j=1;j<=m/2+1;j++) {
pii c = *--s.end();
if(c.f>=(n+1)/2) red[c.s]++,a[i][c.s] = '+',s.erase(c);
else {
pii c = *s.begin();
s.erase(c);
a[i][c.s] = '+';
red[c.s]++; }
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<a[i][j];
cout<<endl;
}
}
}
Compilation message (stderr)
stones.cpp:11:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
11 | main(){
| ^~~~
stones.cpp: In function 'int main()':
stones.cpp:44:5: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
44 | if(c.f+1==(n+1)/2) B--; red[c.s]++; }
| ^~
stones.cpp:44:29: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
44 | if(c.f+1==(n+1)/2) B--; red[c.s]++; }
| ^~~
# | 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... |