ABC F 求调
  • 板块学术版
  • 楼主linxuanrui
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/15 22:23
  • 上次更新2024/6/16 10:30:33
查看原帖
ABC F 求调
857323
linxuanrui楼主2024/6/15 22:23

WA * 4。给个 hack 就行。

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
typedef long long ll;
using namespace std;
const int N = 105;
int n,m,k;
char ch[N * 2][N * 2];
vector<pair<int,int> > v;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> k;
	for(int i = 1;i <= 2 * n + 1;i++){
		for(int j = 1;j <= 2 * m + 1;j++){
			if(i == 1 || i == 2 * n + 1 || j == 1 || j == 2 * m + 1)ch[i][j] = '+';
			else if(i % 2 == 0 && j % 2 == 0)ch[i][j] = 'o';
			else if(i % 2 == 1 && j % 2 == 1)ch[i][j] = '+';
			else ch[i][j] = '.';
		}
	}
	ch[1][2 * m] = 'S',ch[2 * n + 1][2 * m] = 'G';
	if(k < n || (k - n) % 2)return cout << "No",0;
	int t = (k - n);
	if(m != 1){
		if((n % 2 && k >= (m - 1) * (n - 1) + n)){
			int t1 = t / (2 * (m - 1));
			for(int i = 1;i <= t1;i++){
				for(int j = 4;j <= 2 * m;j += 2)ch[-1 + i * 4][j] = '-';
				if(i != t1)for(int j = 2;j <= 2 * m - 2;j += 2)ch[1 + i * 4][j] = '-';
			}
			int lst = 0;
			for(int i = 1;i <= m;i++){
				if(i * 2 + (m - i) == k - m * (n - 2)){
					lst = i;
					break;
				}
			}
			for(int i = 1;i <= lst;i++){
				if(i & 1)ch[2 * n - 2][i * 2 + 1] = '|';
				else ch[2 * n][i * 2 + 1] = '|';
			}
			ch[2 * n - 2][2 * m + 1] = '+';
			for(int i = lst * 2 + 2;i <= (lst % 2 ? 2 * m : 2 * m - 1);i += 2)ch[2 * n - 1][i] = '-';
			if(lst % 2 == 0)ch[2 * n][2 * m - 1] = '|';
		}else{
			int t1 = t / (2 * (m - 1));
			for(int i = 1;i <= t1;i++){
				for(int j = 4;j <= 2 * m;j += 2)ch[-1 + i * 4][j] = '-';
				for(int j = 2;j <= 2 * m - 2;j += 2)ch[1 + i * 4][j] = '-';
			}
			int pos = -1 + (t1 + 1) * 4;
			t1 = t % (2 * (m - 1)) / 2;
			bool flag = (!t1);
			int i;
			for(i = 2 * m;i >= 2;i -= 2){
				if(!t1)break;
				t1--;
				ch[pos][i] = '-';
				if(pos + 2 != 2 * n + 1)ch[pos + 2][i - 2] = '-';
				if(!t1)break;
			}
			if(flag){
				pos--;
				for(int i = pos;i <= 2 * n + 1;i += 2)ch[i][2 * m - 1] = '|';
			}else{
				ch[pos - 1][i - 3] = ch[pos + 1][i - 3] = '|';
				pos += 3;
				for(int i = pos;i <= 2 * n + 1;i += 2)ch[i][2 * m - 1] = '|';
			}
		}
	}
	cout << "Yes\n";
	for(int i = 1;i <= 2 * n + 1;i++){
		for(int j = 1;j <= 2 * m + 1;j++){
			cout << ch[i][j];
		}
		cout << endl;
	}
}
2024/6/15 22:23
加载中...