//mubarizvusal
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define allr(v) v.rbegin(), v.rend()
#define all(v) v.begin(), v.end()
#define mcqueen ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define pii pair<int,int>
#define pb push_back
#define new int32_t
#define ts to_string
#define fi first
#define se second
#define ins insert
#define int ll
#define kub(i) i*i*i
#include <bits/stdc++.h>
using namespace std;
pair<int,int> computeAB(const vector<string> &grid) {
int N = (int)grid.size();
int M = (int)grid[0].size();
// A: Satırlarda '+' sayısı '–' sayısından fazla
// B: Sütunlarda '-' sayısı '+' sayısından fazla
int A = 0;
int B = 0;
// A'yı hesapla
for(int i=0; i<N; i++){
int plusCount = 0, minusCount = 0;
for(int j=0; j<M; j++){
if(grid[i][j] == '+') plusCount++;
else minusCount++;
}
if(plusCount > minusCount) A++;
}
// B'yi hesapla
for(int j=0; j<M; j++){
int plusCount = 0, minusCount = 0;
for(int i=0; i<N; i++){
if(grid[i][j] == '+') plusCount++;
else minusCount++;
}
if(minusCount > plusCount) B++;
}
return {A,B};
}
new main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int T; cin >> T;
while(T--){
int N,M; cin >> N >> M;
vector<vector<string>> candidates; // farklı desenler için gridleri tutacak
// 1. Hepsi '+'
{
vector<string> g(N,string(M,'+'));
candidates.push_back(g);
}
// 2. Hepsi '-'
{
vector<string> g(N,string(M,'-'));
candidates.push_back(g);
}
// 3. Tümü '+' ve c sütunu '-'
{
vector<string> g(N,string(M,'+'));
int c = (M-1)/2;
for(int col=0; col<c; col++){
for(int i=0;i<N;i++){
g[i][col] = '-';
}
}
candidates.push_back(g);
}
// 4. Tümü '-' ve r satırı '+'
{
vector<string> g(N,string(M,'-'));
int r = (N-1)/2;
for(int row=0; row<r; row++){
for(int j=0;j<M;j++){
g[row][j] = '+';
}
}
candidates.push_back(g);
}
// 5. Dama Deseni 1: (i+j) çift '+', diğer '-'
{
vector<string> g(N,string(M,'+'));
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if((i+j)%2==0) g[i][j] = '+';
else g[i][j] = '-';
}
}
candidates.push_back(g);
}
// 6. Dama Deseni 2: (i+j) çift '-', diğer '+'
{
vector<string> g(N,string(M,'+'));
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if((i+j)%2==0) g[i][j] = '-';
else g[i][j] = '+';
}
}
candidates.push_back(g);
}
// 7. Yarısı '+' satırlar, diğer yarısı '-' satırlar
{
vector<string> g(N,string(M,'+'));
int half = N/2;
// İlk half satır '+', geri kalan '-'
// Zaten '+' doldurduk, geri kalanı '-' yapalım
for(int i=half; i<N; i++){
for(int j=0;j<M;j++){
g[i][j] = '-';
}
}
candidates.push_back(g);
}
// 8. Yarısı '+' sütunlar, yarısı '-' sütunlar
{
vector<string> g(N,string(M,'+'));
int half = M/2;
// İlk half sütun '+', geri kalan '-'
// Zaten '+' doldurduk, geri kalan sütunları '-'
for(int i=0;i<N;i++){
for(int j=half;j<M;j++){
g[i][j] = '-';
}
}
candidates.push_back(g);
}
// Şimdi tüm aday gridler için A+B değerini hesapla, en iyisini seç
int bestVal = -1;
int bestIdx = 0;
for(int i=0; i<(int)candidates.size(); i++){
auto [A,B] = computeAB(candidates[i]);
int val = A+B;
if(val > bestVal){
bestVal = val;
bestIdx = i;
}
}
cout << bestVal << "\n";
for(auto &row : candidates[bestIdx]) cout << row << "\n";
}
}
# | 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... |