首页 > 其他分享 >构造题-题单-思路

构造题-题单-思路

时间:2022-12-03 12:34:07浏览次数:54  
标签:dfs int len while 构造 思路 include dir 题单

题单

图形构造

牛客练习赛106-D

传送门

思路

条件 n为奇数, 01数量相差为1,无回路, 1和1连通,0和0连通。

首先 该图可能满足 0 和 1在图中所构成的图形相同, 我们可以构造一个螺旋矩阵

但是螺旋矩阵中间的数无法填写, 因为会构成回路。

image-20221203121636543

首先构成该图后,我们假设填入中间为红色,那么 对于红色和蓝色的任意次交换都不会改变其\(\lfloor \frac{n}{2} \rfloor + 1\) 和 \(\lfloor \frac{n}{2} \rfloor\) 的数量。

如果,我们填蓝色经过交换D3处和其有些对角线处元素,可以满足条件

image-20221203121828030

image-20221203122432197

不失一般性, 对于任意大于3的奇数n我们都可以构造螺旋矩阵, 在中间填写上与其正上方或右侧相同颜色的元素, 那么对其右侧和下方连续交换直到不存在右侧下方元素,必然会得到满足该条件的矩阵,证略。

Code

#include <iostream>
#include <queue>
#include <vector>
#include <utility>
#include <cstring>
#include <stack>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = 1e3 + 10;

int a[N][N], n;

void dfs(int x, int y, int dir, int len) {
	if (len == 1)
		return;
	if (dir == 0) { // 向右

		while (y < len) a[x][++y] = 1;
		dfs(x, y, 1, len - 1);

	} else if (dir == 1) { // 向下

		while (x < len) a[++x][y] = 1;
		dfs(x, y, 2, len);

	} else if (dir == 2) { // 向左

		while (y > n - len + 1) a[x][--y] = 1;	
		dfs(x, y, 3, len - 1);

	} else if (dir == 3) { // 向上

		while (x > n - len + 1) a[--x][y] = 1;
		dfs(x, y, 0, len);

	}
}

int main() {
	cin >> n;
	dfs(1, 0, 0, n);
	int mx, my, tx, ty;
	mx = my = n/2 + 1;
	tx = mx, ty = my + 1;
	a[mx][my] = a[mx-1][my];

	while (ty <= n && ty <= n) {
		swap(a[tx][ty], a[tx + 1][ty + 1]);
		tx ++, ty ++;
	}


	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= n; j ++) {
			cout << a[i][j];
		}
		cout << endl;
	}
}

标签:dfs,int,len,while,构造,思路,include,dir,题单
From: https://www.cnblogs.com/jacklee404/p/16947328.html

相关文章

  • 碎碎念·思路整理
    人总是时而勤奋,时而懒惰——齐一·《非正常励志歌》 因为工作原因,我的工作,很多时候我忙不过来,但是有时候又会剩下几个很难,难到无从下手,前后端的前辈也不一定能给出比较......
  • 0、智能座舱学习思路
    1、车载测试的发展现状与前景2、汽车测试工程师的工作职责3、汽车电子系统及常用功能介绍4、汽车Can、Lin、Flexray协议介绍5、Canoe工具的安装步骤6、Canoe......
  • 原生OKHttp的Get和Post请求思路
    原生OKHttp的Get和Post请求思路引入pom依赖<!--接收OKHttp返回json信息依赖-->   <dependency>     <groupId>com.squareup.okhttp3</groupId> ......
  • C#中子类调用父类的构造方法
    本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下:publicclassPerson{publicPerson(){Console.WriteLine("我是人......
  • 秒杀优化-异步秒杀思路
    当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是......
  • 2022.11.29 vjudge构造、思路题
    WeightingaTree构造切入点:调整总结:图上的题,可以先考虑树上的做法。(尤其是构造题)首先我们要知道这种“点与跟他连着的所有边的关系”什么的题的套路就是找生成树。-......
  • Qt视频监控系统一个诡异问题的解决思路(做梦都想不到)
    一、前言由于Qt版本众多,几百个版本之间存在不兼容的情况,为此如果要兼容很多版本,没有取巧的办法和特殊的捷径,必须自己亲自安装各个版本编译运行并测试,大问题一般不会有,除非......
  • 1.类&对象&构造方法
    1.类和对象的内存处理方式1.1方法区(methodarea)也称静态区,用于存放用户定义的各个类、静态变量等。1.2堆(heap)堆中存放对象和非静态变量。在使用new关键字产生......
  • 关于账本的数据一致性较好的解决思路
    账本中采用申请单制1.每笔进出账订单都先生成一笔申请单记录金额,进出款类型,2.默认状态未开始,当资金已经消费或者最终返款完成时,申请单完结3.每天执行定时任务对上一......
  • 博奥智源公司:微信代运营思路详解
    1.专人运营。运营方需安排至少1名专职编辑负责收集、挖掘区文化旅游资源,策划原创微信向市民、游客推荐优质文旅线路和人文故事,并有专人负责审核、校对、采稿、拍摄、美编、......