제출 #1156298

#제출 시각아이디문제언어결과실행 시간메모리
1156298Jawad_Akbar_JJRed-blue table (IZhO19_stones)C++20
100 / 100
128 ms2224 KiB
#include <iostream>
#include <set>
#include <vector>

using namespace std;
char a[1005][1005];

int solve(int n, int m, int p = 0, int sw = 0){
	set<pair<int,int>> s;
	for (int i=0;i<n;i++)
		s.insert({m, i});

	for (int i=0;i<n;i++)
		for (int j=0;j<m;j++)
			a[i][j] = '+';
	
	int Ans = n, d = n / 2 + 1;
	for (int j=0;j<m;j++){
		vector<pair<int,int>> vec;
		for (int i=0;i<d;i++)
			if (((*rbegin(s)).first - 1) * 2 > m)
				vec.push_back(*rbegin(s)), s.erase(prev(end(s)));
		if (vec.size() < d)
			break;
		Ans++;
		for (auto [nm, i] : vec)
			a[i][j] = '-', s.insert({nm - 1, i});
	}
	if (p == 0) return Ans;

	cout<<Ans<<'\n';
	if (sw){
		for (int j=0;j<m;j++){
			for (int i=0;i<n;i++)
				a[i][j] = '+' + '-' - a[i][j], cout<<a[i][j];
			cout<<'\n';
		}
		return Ans;
	}

	for (int i=0;i<n;i++){
		for (int j=0;j<m;j++)
			cout<<a[i][j];
		cout<<'\n';
	}
	return Ans;
}

int main(){
	int n, m, t;
	cin>>t;
	while (t--){
		cin>>n>>m;

		if (solve(n, m) > solve(m, n))
			solve(n, m, 1, 0);
		else
			solve(m, n, 1, 1);
	}
}
#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...