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>
using namespace std;
/*
#pragma GCC optimize("Ofast")
#pragma comment(linker, "/stack:200000000")
#pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native" )
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("profile-values,profile-reorder-functions,tracer")
#pragma GCC optimize("vpt")
#pragma GCC optimize("rename-registers")
#pragma GCC optimize("move-loop-invariants")
#pragma GCC optimize("unswitch-loops")
#pragma GCC optimize("function-sections")
#pragma GCC optimize("data-sections")
#pragma GCC optimize("branch-target-load-optimize")
#pragma GCC optimize("branch-target-load-optimize2")
#pragma GCC optimize("btr-bb-exclusive")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
*/
#define ll long long
#define all(x) x.begin(),x.end()
#define sz(x) (int) x.size()
#define f first
#define s second
#define ld long double
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
#define pb push_back
#define popcount __builtin_popcount
#define endl '\n'
#define int long long
const long double Eps = 1e-12;
const int max1 = 2e9*1.4;
const int min1 = -1e9 *1.4;
const ll mod1 = 1000000007;
const ll mod2 = 2000000011;
const ll mod3 = 3000000017;
const ll mod = 998244353;
const int N = 5e5 + 100;
const int B = 1e6 + 1;
const ll INF = 3e18 + 100;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll binpow(ll x,ll y,ll md) {
if(y == 0) return 1;
if(y == 1) return x;
if(y % 2 == 0) {
ll now = binpow(x,y/2,md);
return (1ll*now*now) % md;
}
else {
ll now = binpow(x,y/2,md);
return (1ll*((1ll*now*now) % md)*x) % md;
}
}
/*
for(int l = 0;l < logn - 1;l++) {
for(int i = 0;i + (2 << l) <= n;i++) {
sp[l + 1][i] = merge(sp[l][i],sp[l][i + (1 << l)]);
}
}
int rmq(int l,int r) {
int t = log2(r - l);
return merge(sp[t][l],sp[t][r - (1 << t)]);
}
*/
int n,m;
int check(int x) {
multiset <int> s;
for(int i = 1;i <= x;i++) s.insert(m);
for(int i = 1;i <= n - x;i++) s.insert((m - 1)/2);
int ans = 0;
while(true) {
vector <int> v;
for(int i = 1;i <= n/2 + 1;i++) {
if(s.empty()) break;
int g = *--s.end();
s.erase(s.find(g));
v.pb(g);
}
if(sz(v) != n/2 + 1) {
break;
}
if(sz(v) > n/2 + 1) break;
ans++;
for(auto x:v) if(x - 1) s.insert(x - 1);
}
return ans;
}
signed main() {
ios_base::sync_with_stdio(NULL);
cin.tie(0);
cout.tie(0);
int tt;
cin >> tt;
while(tt--) {
cin >> n >> m;
int now = 0;
int l = 0;
for(int i = 0;i <= n;i++) {
if(check(i) + (n - i) > now) {
now = check(i) + (n - i);
l = i;
}
}
multiset <pair <int,int > > s;
char ans[n + 1][m + 1];
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
ans[i][j] = '+';
}
}
for(int i = n - l + 1;i <= n;i++) {
s.insert({m,i});
}
for(int i = 1;i <= n - l;i++) {
s.insert({(m - 1)/2,i});
}
int sum = 0;
int it = 1;
while(!s.empty()&&it <= m) {
vector <pair <int,int> > v;
for(int i = 1;i <= n/2 + 1;i++) {
if(s.empty()) break;
pair <int,int> g = *--s.end();
ans[g.s][it] = '-';
s.erase(s.find(g));
v.pb(g);
}
if(sz(v) != n/2 + 1) {
break;
}
sum++;
it++;
for(auto x:v) if(x.f - 1) s.insert({x.f - 1,x.s});
}
cout << sum + (n - l) << endl;
for(int i = 1;i <= n;i++) {
for(int j = 1;j <= m;j++) {
cout << ans[i][j];
}
cout << endl;
}
}
}
/*
Lxner & WENARO
Лед
-------------------------------------------------------------------
Вс-все твои слёзы просто превращаю в лёд (В лёд)
Я спрячу сердце, его никто не найдёт
Не-не-не-не-не вижу смысла кончить этот эпизод
Я-я-я вижу выход, но не могу найти вход (—Ход-ход-ход-ход-ход, вход)
Все твои слёзы просто превращаю в лёд
Я-я-я спрячу сердце, его никто не найдёт (Не найдёт)
Не вижу смысла кончить этот эпизод (Лё-ё-ёд)
Я вижу выход, но не могу найти вход (И-и)
Все твои слёзы просто превращаю в лё-лё-лёд
Я спрячу сердце, его никто не найдёт (Я-я)
Не вижу смысла кончить этот эпизод
Я вижу выход, но не могу найти вход
Мно-мно-много говоришь — пустые слова (—Ва-ва-ва)
Самый одинокий парень я — навсегда
Ка-ка-как бы ни хотел, но ты одна нужна
Боль и слёзы, да, бывает, иногда (Лёд, лёд)
Все твои слёзы просто превращаю в лё-лё-лёд
Я спрячу сердце, его никто не найдёт (А-а-а-а-а)
Бывает больно, но я знаю всё пройдёт (Всё пройдёт)
Я вижу выход, но не могу найти вход (А-а)
Все твои слёзы просто превращаю в лё-лё-лёд
Я спрячу сердце, его никто не найдёт (Лё-лё-лё-лё-лёд)
Бывает больно, но я знаю всё пройдёт (Всё пройдёт)
Я вижу выход, но не могу найти вход (—Ход-ход-ход-ход, вход)
И не растопишь, и не сможешь забыть (За-а-а-а—)
Где-то без меня нашла новую жизнь
Тебя так манит этот холодный мир
И-и-и-и-и ты как айсберг, ведь я снова разбит
It's so hard, это сложно
О-о-она застыла в ожидании солнца-а-а-а
Но я не думаю что сможет согреть
Её ледяную душу, остаётся лишь смотреть (А, а, а-а-а-а)
Все твои слёзы просто превращаю в лёд
Я-я-я спрячу сердце, его никто не найдёт (Не найдёт)
Не вижу смысла кончить этот эпизод (—З-з-з-од)
Я вижу выход, но не могу найти вход (И-и)
Все твои слёзы просто превращаю в лё-лё-лёд
Я-я спрячу сердце, его никто не найдёт
Не вижу смысла кончить этот эпизод
Я вижу выход, но не могу найти вход
Твои слёзы просто-просто пре— в лёд
Я-я-я-я прячу сердце, его-его не найдёт (Не найд—, не най—)
Не вижу смысла кончить-кончить эпизод (А-а-а-а, а-а-а-а)
Я вижу выход, но не—, но не— найти вход
(—Ход-ход-ход-ход-ход, вход) Все твои слёзы просто превращаю в лёд
Я-я-я-я спрячу сердце, его никто не найдёт (Не найдёт)
Не вижу смысла кончить этот эпизод (—З-з-з-од)
Я вижу выход, но не могу-гу най— вход
*/
# | 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... |