답안 #519588

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
519588 2022-01-26T18:11:41 Z shmad Red-blue table (IZhO19_stones) C++17
38 / 100
26 ms 2628 KB
#pragma GCC optimize("O3", "unroll-loops") // "Ofast"
#pragma GCC target("avx2", "bmi", "bmi2", "lzcnt", "popcnt") 

#include <bits/stdc++.h>

#define int long long
#define vt vector
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
#define ff first
#define ss second
#define dbg(x) cerr << #x << " = " << x << '\n'

using namespace std;
using ll = long long;
using pii = pair<int, int>;
using vvi = vt< vt<int> >;
using vc = vt<char>;
using vvc = vt<vc>;

const int N = 1e6 + 5, mod = 1e9 + 7, inf = 1e18 + 7, B = 500, LIM = (1ll << 60);
const double eps = 1e-6;

int n, m;

void solve_odd (vvc a) {
	cout << n - 1 + m - 1 << '\n';
	for (int i = 1; i < n; i++) {
		for (int j = 1; j < m; j++) {
			if ((i + j) & 1) a[i][j] = '-';
		}
	}
	for (int j = 1; j <= m; j++) a[n][j] = '-';	
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) cout << a[i][j];
		cout << '\n';
	}
}

void solve_m1 (vvc a) {
	cout << n << '\n';
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) cout << a[i][j];
		cout << '\n';
	}
}

void solve_n1 (vvc a) {
	cout << m << '\n';
	for (int j = 1; j <= m; j++) a[1][j] = '-';
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) cout << a[i][j];
		cout << '\n';
	}
}

void solve_1_2 (vvc a) {
	if (n < m) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) a[i][j] = (i > n / 2 + 1 ? '+' : '-');
		}
	}
	else {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) a[i][j] = (j > m / 2 + 1 ? '-' : '+');
		}
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		int cnt = 0;
		for (int j = 1; j <= m; j++) cnt += (a[i][j] == '+');
		if (cnt > m / 2) ans++;
	}
	for (int i = 1; i <= m; i++) {
		int cnt = 0;
		for (int j = 1; j <= n; j++) cnt += (a[j][i] == '-');
		if (cnt > n / 2) ans++;
	}
	cout << ans << '\n';
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) cout << a[i][j];
		cout << '\n';
	}          
}

void solve () {
	cin >> n >> m;
	vvc a(n + 1, vc (m + 1, '+'));    
	if (m == 1) return (void)(solve_m1(a));
	if (n == 1) return (void)(solve_n1(a));
	bool sub_1_2 = (min(n, m) <= 4), sub4 = ((n & 1) && (m & 1));
	if (sub_1_2) {
		solve_1_2(a);
		return;
	}
	if (sub4) {
		solve_odd(a);
		return;
	}
	cout << '\n';
}

bool testcases = 1;
                  
signed main() {
#ifdef ONLINE_JUDGE
	freopen(".in", "r", stdin);
	freopen(".out", "w", stdout);
#endif
    cin.tie(0) -> sync_with_stdio(0);
    int test = 1;
    if (testcases) cin >> test;
    for (int cs = 1; cs <= test; cs++) {
        solve();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 292 KB Output is correct
2 Correct 1 ms 308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 292 KB Output is correct
2 Correct 1 ms 308 KB Output is correct
3 Correct 2 ms 332 KB Output is correct
4 Incorrect 4 ms 292 KB Wrong answer
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 1316 KB Output is correct
2 Correct 21 ms 2236 KB Output is correct
3 Correct 19 ms 2628 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 804 KB Wrong answer
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 292 KB Output is correct
2 Correct 1 ms 308 KB Output is correct
3 Correct 2 ms 332 KB Output is correct
4 Incorrect 4 ms 292 KB Wrong answer
5 Halted 0 ms 0 KB -