【构造】Codeforces Round #480 (Div. 2) B. Marlin

题意:给你一个4*n的网格,保证n为奇数,让你在其中放k个障碍物,不能放在边界的格子上,使得从左上角走到右下角的最短路的方案数,恰好等于从左下角走到右上角的最短路的方案数。

k为偶数时,以纵向为对称轴进行摆放即可。

k为奇数且小于等于n-2时,如下图横向对称摆放:

...........
...........
...#####...
...........

k等于n时,如下图:

.............
.#.........#.
.###########.
.............

k大于n时,在上图空闲的位置随便填即可。

#include<cstdio>
using namespace std;
int n,K;
char a[6][105];
int main(){
	scanf("%d%d",&n,&K);
	for(int i=1;i<=4;++i){
		for(int j=1;j<=n;++j){
			a[i][j]=‘.‘;
		}
	}
	puts("YES");
	if(K%2==0){
		K/=2;
		for(int i=1;i<=K;++i){
			a[2][i+1]=a[3][i+1]=‘#‘;
		}
	}
	else{
		if(n==1){
			a[2][2]=‘#‘;
		}
		else if(K<=n-2){
			for(int i=1,j=(n-K)/2+1;i<=K;++i,++j){
				a[3][j]=‘#‘;
			}
		}
		else if(K==n){
			for(int i=1,j=2;i<=n-2;++i,++j){
				a[3][j]=‘#‘;
			}
			a[2][2]=a[2][n-1]=‘#‘;
		}
		else{
			for(int i=1,j=2;i<=n-2;++i,++j){
				a[3][j]=‘#‘;
			}
			a[2][2]=a[2][n-1]=‘#‘;
			for(int i=3,j=1;i<=n-2 && j<=K-n;++i,++j){
				a[2][i]=‘#‘;
			}
		}
	}
	for(int i=1;i<=4;++i){
		for(int j=1;j<=n;++j){
			putchar(a[i][j]);
		}
		puts("");
	}
	return 0;
}

原文地址:https://www.cnblogs.com/autsky-jadek/p/9013375.html

时间: 2024-10-16 04:26:59

【构造】Codeforces Round #480 (Div. 2) B. Marlin的相关文章

Codeforces Round #480 (Div. 2) C 贪心 D 数字、思维 E 树上倍增

Codeforces Round #480 (Div. 2) C. Posterized 题意: 给出 n 个数,都是区间 [0,255] 内的数,要你把 [0,255] 划分成多个长度 <=k 的不重叠的子区间.每个数必须包含在一个子区间内,且这个数的价值是这个子区间的左端点.要你输出这 n 数的价值,且这 n 个价值字典序要最小. tags: 首先很明显字典序最小,那对于第 i 个数 p[i] 定它的区间时,左端点肯定要尽可能小.所以我们直接枚举区间 [ p[i]-k+1, p[i] ] 定

构造 Codeforces Round #Pi (Div. 2) B. Berland National Library

题目传送门 1 /* 2 题意:给出一系列读者出行的记录,+表示一个读者进入,-表示一个读者离开,可能之前已经有读者在图书馆 3 构造:now记录当前图书馆人数,sz记录最小的容量,in数组标记进去的读者,分情况讨论一下 4 */ 5 /************************************************ 6 * Author :Running_Time 7 * Created Time :2015-8-6 0:23:37 8 * File Name :B.cpp 9

暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns

题目传送门 1 /* 2 题意:删除若干行,使得n行字符串成递增排序 3 暴力+构造:从前往后枚举列,当之前的顺序已经正确时,之后就不用考虑了,这样删列最小 4 */ 5 /************************************************ 6 Author :Running_Time 7 Created Time :2015-8-3 10:49:53 8 File Name :C.cpp 9 ************************************

构造 Codeforces Round #107 (Div. 2) B. Phone Numbers

题目传送门 1 /* 2 构造:结构体排个序,写的有些啰嗦,主要想用用流,少些了判断条件WA好几次:( 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <cmath> 8 #include <vector> 9 #include <map> 10 #include <iostream> 11 #include &

贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation

题目传送门 1 /* 2 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 3 */ 4 /************************************************ 5 Author :Running_Time 6 Created Time :2015-8-3 9:14:02 7 File Name :B.cpp 8 *************************************************/ 9 10 #include

构造 Codeforces Round #310 (Div. 2) B. Case of Fake Numbers

题目传送门 1 /* 2 题意:n个数字转盘,刚开始每个转盘指向一个数字(0~n-1,逆时针排序),然后每一次转动,奇数的+1,偶数的-1,问多少次使第i个数字转盘指向i-1 3 构造:先求出使第1个指向0要多少步,按照这个次数之后的能否满足要求 4 题目读的好累:( 5 */ 6 #include <cstdio> 7 #include <iostream> 8 #include <algorithm> 9 #include <cstring> 10 #i

构造 Codeforces Round #135 (Div. 2) B. Special Offer! Super Price 999 Bourles!

题目传送门 1 /* 2 构造:从大到小构造,每一次都把最后不是9的变为9,p - p MOD 10^k - 1,直到小于最小值. 3 另外,最多len-1次循环 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 using namespace std; 10 11 typedef long long ll; 12 const i

Codeforces Round #480 (Div. 2)

这是<2100参加div2 only制度的第一场 然而3大号都打不了(都>2200) 随便抓了只黑名小号来打 A 如果珍珠个数为0或串长约数即可 00:03:18 B 一开始脑子糊涂了 以为有的时候不行 还wa了一发 事实上 左下到右上等价于右上到左下 沿竖着的对称轴对称放障碍即可 00:16:38 C 贪心 00:27:11 D 把每个数除去所有平方因子 相同的一组 从n个点开始向右扫一遍统计即可 注意0放入任何其他组不不影响 00:37:20 E 我们考虑留下哪些数 k<n n号节点

Codeforces Round 480 Div 2 光荣掉分记

痛 痛苦 痛苦啊. 越接近黄名想的越多了啊…… 都说了不要在意rating这破玩意了…… 没出E就算了,策略问题. 居然还FST了: FST个D就算了: FST个A算个**啊. 紧张的时候总会写出一些垃圾代码. 痛苦啊. 原文地址:https://www.cnblogs.com/cxhscst2/p/9017306.html