首页 > 其他分享 >「清新题精讲」CheckerExpansion

「清新题精讲」CheckerExpansion

时间:2024-05-28 22:12:25浏览次数:24  
标签:tmp le return CheckerExpansion res 精讲 int 清新 LL

SRM 550 - 500 CheckerExpansion

Description

起初 \((0,0)\) 点 Alice 填为了红色,接下来 \(t\) 次操作 Alice 和 Bob 轮流操作,如果 \((x-1,y-1)\) 位置被另一方填了且 \((x-2,y)\) 为空;或 \((x-1,y-1)\) 为空且 \((x-2,y)\) 被另一方填了,则当前方将填 \((x,y)\)。

给定 \(x,y,h,w\) 表示一个方格,输出该方格内的所有点(A 表示 Alice 填的,B 表示 Bob 填的)。

\(1\le x,y,t\le 10^{12},1\le h,w\le 50\)

Solution

拿到这个题感觉没有什么思路,于是不妨先打个表(如图)

注意,这里左上角为 \((0,0)\)。不错呦,有规律诶,是图形的分形!于是乎,考虑分治,不难发现每次划分为 \(3\) 部分,不断地将坐标缩小至左上角部分并不断分治。不难发现,这样就可以判断出任意一个点是否被填了。若要判断 A 还是 B,只需要判断 \(\frac{x+y}{2}\) 的奇偶性即可。

具体分治过程,详见代码。

Code

class CheckerExpansion {
public:
	int lg2(LL x) {
		int res = 0;
		while (x != 1) res ++, x /= 2;
		return res;
	}
	int Exist(LL x, LL y) {
		if ((x + y & 1) || (x < y)) return 0;
		LL turn = x + y >> 1;
		if (turn <= 1) return 1;
		LL h = (1ll << lg2(turn)), w = (1ll << lg2(turn)) * 2;
		if (x < w && y < h) return 0;
		if (y >= h) y -= h, x -= h;
		if (x >= w) x -= w;
		return Exist(x, y);
	}
	std::vector<string> resultAfter(LL turn, LL x, LL y, int h, int w) {
		std::vector<string> res;
		for (LL i = y + w - 1; i >= y; i --) {
			string tmp;
			for (LL j = x; j <= x + h - 1; j ++) {
				if ((i + j >> 1) >= turn || !Exist(j, i)) tmp += '.';
				else if ((i + j >> 1) & 1) tmp += 'B';
				else tmp += 'A';
			}
			res.push_back(tmp);
		}
		return res;
	}
};

标签:tmp,le,return,CheckerExpansion,res,精讲,int,清新,LL
From: https://www.cnblogs.com/Tiny-konnyaku/p/18219032

相关文章

  • 「清新题精讲」Skiers
    SkiersDescription给定\(n\)个点的有向无环平面图,求最少多少条从\(1\)到\(n\)的路径能覆盖原图的所有边?\(1\len\le5\times10^3\)Solution考虑从\(1\)到\(n\)的路径其实是边的链覆盖,那么最小链覆盖即为求解的答案。通过Dilworth定理可知,最小链覆盖等于最大反链,......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——高性能的 gRPC
    远程过程调用RPC——高性能的gRPC gRPC,这一由Google推出的高性能、开源、通用RPC框架,凭借其众多引人注目的特性,已成为业界瞩目的焦点。它基于HTTP/2协议标准设计开发,并采用ProtocolBuffers作为默认的数据序列化协议,广泛支持多种编程语言。gRPC不仅简化了服务的精确定义,而且......
  • Bash脚本语法解析(典例精讲)
    参考资料:https://github.com/AUTOMATIC1111/stable-diffusion-webuihttps://razeen.me/posts/the-ultimate-programmers-guide-to-bash-scripting/众所周知.sh文件是Linux系统中的脚本文件。(与之相对的还有windows系统上对应cmd的bat文件,对应powershell的ps1文......
  • BSP视频教程第30期:UDS ISO14229统一诊断服务CAN总线专题,常用诊断执行流程精讲,干货分享
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 【前言】1、继前面分享了CANopen和J1939的专题后,这次继续为大家分享UDS专题视频第1期。2、统一诊断服务(UnifiedDiagnosticServices,简称UDS)是车用电子的通信协议,是电子控制器ECU中设备诊断用的网......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——优化RPC调用,缓解频繁请求
    远程过程调用RPC——优化RPC调用,缓解频繁请求导致的GC压力 在Go语言的高并发和微服务架构中,远程过程调用(RPC)是一种常用的通信机制。然而,当频繁发送RPC请求时,不断创建Request和Response结构体可能会带来额外的垃圾收集(GC)压力,进而影响应用的性能和响应时间。为了减......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——客户端处理RPC请求的原理
    远程过程调用RPC——客户端处理RPC请求的原理及源代码分析 客户端无论是同步调用还是异步调用,每次RPC请求都会生成一个Call对象,并使用seq作为key保存在map中,服务端返回响应值时再根据响应值中的seq从map中取出Call,进行相应处理。 客户端发起RPC调用的过程大致如下所示,我们......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——服务端注册实现原理分析
    远程过程调用RPC——服务端注册实现原理分析rpcserver代码参考我前一篇博文:https://www.cnblogs.com/zuoyang/p/18146870RPCServer端的RPC代码架构主要由两大部分构成:第一部分是服务方法的注册过程。在这个过程中,我们首先通过调用rpc.Register接口将服......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC——实践案例:Go 语言 RPC 过程
    远程过程调用RPC——实践案例:Go语言RPC过程调用实践 Go语言的官方RPC库/net/rpc为开发者提供了实现远程过程调用的强大功能,使得通过网络访问对象的方法成为可能。这种机制极大地促进了分布式系统的构建,让不同的服务能够轻松地进行相互通信和协作。 在使用Go的RPC库时,服务......
  • Go语言高并发与微服务实战专题精讲——远程过程调用 RPC
    远程过程调用RPC 在微服务架构中,每个服务实例负责某一单一领域的业务实现,不同服务实例之间需要进行频繁的交互来共同实现业务。服务之间通过轻量级的远程调用方式进行通信。比如说RPC和HTTP。两者虽然同为微服务实例之间远程调用的方式,但是HTTP调用是应用层协议,而RPC的......
  • 精讲AI教程: 免费使用Flowise搭建LLM工作流应用
    大家好,我是斜杠君。今天,和大家分享一个低代码/无代码拖放工具——Flowise,可以让你轻松可视化和构建LLM应用程序。  什么是Flowise? 官方定义:Flowise是一种低代码/无代码拖放工具,旨在让人们轻松可视化和构建LLM应用程序。 斜杠君解释:就是把各模块拖拽组合在一起,组......