首页 > 其他分享 >[ABC345D] Tiling 位运算の极致运用

[ABC345D] Tiling 位运算の极致运用

时间:2024-03-21 23:48:00浏览次数:19  
标签:矩形 return int ABC345D i128 Tiling 极致

[ABC345D] Tiling

原题解地址:Editorial by Kiri8128

神写法。

将 \(H \times W\) 的网格展开为 \(H \times (W + 1)\) 的序列, 每行多出来的一格表示换行。

W += 1;

令 \(F(a, b)\) 表示长为 \(a\),宽为 \(b\) 的矩形填满网格左上角的状态,直接给出公式,可以模拟检验正确性。

i128 F(int a, int b) {
	return (((i128)1 << a * W) - 1) / ((1 << W) - 1) * ((1 << b) - 1);
}

搜索过程:

  • 枚举每个矩形出现顺序。
  • 初状态 \(s = F(H, W - 1)\)。
  • 二进制枚举每个矩形是否旋转。
  • 设 \(x\) 为矩形的值,如果 \(x \ \& \ s = x\),那么 \(x\) 能填入,否则结束循环。
  • 当一个矩形能够填入时,更新左上角,用 \(lowbit\) 去掉 \(s\) 末尾的 \(0\)。
  • \(s = 0\) 即找到一组合法解。

写法较于一些冗长的搜索显得极为优雅。

注意 next_permutation 是按字典序判的,因此先排序。

#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); ++ i)
#define per(i, a, b) for(int i = (a); i >= (b); -- i)
#define pb emplace_back
using namespace std;
using i128 = __int128;

int N, H, W;

i128 F(int a, int b) {
	return (((i128)1 << a * W) - 1) / ((1 << W) - 1) * ((1 << b) - 1);
}

int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	cin >> N >> H >> W;
	W += 1;
	vector<pair<i128, i128>> a;
	rep(i, 1, N) {
		int x, y; cin >> x >> y;
		a.pb(F(x, y), F(y, x));
	}
	i128 S = F(H, W - 1);
	ranges::sort(a);
	do {
		for(int i = 0; i < 1 << N; ++ i) {
			i128 s = S;
			for(int j = 0; j < N; ++ j) {
				i128 x = (i >> j & 1) ? a[j].first : a[j].second;
				if((x & s) != x) break;
				if((s ^= x) == 0) {
					cout << "Yes";
					exit(0);
				}
				s /= s & -s;
			}
		}
	} while(ranges::next_permutation(a).found);
	cout << "No";
	return 0;
}

标签:矩形,return,int,ABC345D,i128,Tiling,极致
From: https://www.cnblogs.com/Luxinze/p/18088477

相关文章

  • 颠覆传统编程:Codigger极致体验之旅
    在数字化浪潮汹涌的当下,编程已成为推动科技发展的重要引擎。而在这其中,极致编程体验无疑是每位开发者所追求的目标。它不仅代表着工具的高效能与稳定性,更映射出开发者在编程世界中的自由与创造力。Codigger,以其领先的开发框架和卓越的设计理念,正为开发者们带来前所未有的极致编......
  • 揭秘极致编程体验:代码背后的魔法世界
    想象一下,你手中有一把魔法棒,只需轻轻一挥,就能让计算机为你实现各种神奇的功能。其实,这把魔法棒就是编程语言,而你就是那位魔法师。今天,我们就来一起探索这个代码背后的魔法世界,看看如何创造一次极致的编程体验。编程:从0到1的创造之旅编程,简单来说,就是告诉计算机如何执行任务......
  • 数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性​!
    体验地址:https://developer.aliyun.com/topic/march/polardbserverless本次基于阿里云瑶池数据库解决方案体验馆,带你体验PolarDBMySQLServerless形态下的性能压测环境,基于可选择的标准压测工具进行压测,构造弹性场景进行压测,实时动态展示弹性能力、价格和性价比结果,压测环境可开......
  • 【Cesium杂谈】Cesium的tilingScheme和天地图服务
    Cesium的tilingSchemeCesium的tilingSchme决定了瓦片的组织方式。内部实现了两种tilingScheme方式:GeographicTilingScheme和WebMercatorTilingScheme。tilingScheme类有以下一些成员变量ellipsoid:椭球体,这个都是WGS84projection:使用的投影方式,GeographicTilingScheme对应的是......
  • 这份攻略帮助你分分钟构建出“幻兽帕鲁游戏”极致体验
    春节前夕,一款名为《幻兽帕鲁(Palworld)》的游戏火爆出圈,在数天之内销量达到数百万,半月之内玩家达到了数千万之多。为了提升用户的体验,国内云厂商,诸如阿里云、华为云、腾讯云等纷纷推出幻兽帕鲁服务器,玩家可以在分钟级别内快速构建出开箱即用的幻兽帕鲁服务器。对于快速构建云服务......
  • GaussDB(for MySQL) Serverless全面商用:无感弹性,极致性价比
    本文分享自华为云社区《GaussDB(forMySQL)Serverless全面商用:无感弹性,极致性价比》,作者:GaussDB数据库。技术背景对于现代企业级IT系统,数据库往往是作为底座一般的存在,数据库的稳定性、可靠性如果难以保障,整个系统的平稳运行将无从谈起。出于如上考量,在部署数据库资源时,客户......
  • 极致成本,如何基于容器计算服务 ACS 打造企业级幻兽帕鲁私服 SaaS 服务?
    作者:韩运韬(青炽)《幻兽帕鲁》是一款最近大热的开放世界生存游戏。据报道。上市不到一周,《幻兽帕鲁》销量已突破700万份,成为名副其实的现象级游戏。根据游戏数据库网站SteamDB的数据显示,《幻兽帕鲁》Steam同时在线人数最高达到201万,成为史上同时在线玩家数量最高的付费游戏......
  • 告别 GPU 焦虑,玩转极致性价比的 CPU 文生图
    作者:壮怀、竹刚AIGC中的StableDiffusion文生图模型是开源流行的跨模态生成模型,用于生成给定文本对应的图像。但由于众所周知的原因,GPU资源出现了一卡难求的现状,如何通过云计算快速提升业务规模,降低文生图的计算成本,以及更好的保护自定义的扩展模型?针对文生图模型特性和规模......
  • 通达信【掘金红筹】全套公式 共29个指标 暴利到极致 底部连续涨停 捉妖抄底指标 源码
    通达信【掘金红筹】全套公式底部连续涨停捉妖抄底指标黑马启动源码文件分享指标包括主图附图选股指标在内,一共29个指标标准启动:股票启动连续涨停的第一日,发出‘标准启动信号强力启动:标准信号发出信号偏多,强力启动会进行筛选和屏蔽超级启动:标准启动信号多,强力启动信号少,超......
  • DBeaver Ultimate Edtion 22.1 Multilingual (macOS, Linux, Windows) - 通用数据库工
    作者主页:www.sysin.org通用数据库工具DBeaver是一个通用的数据库管理工具,适用于需要以专业方式处理数据的每个人。使用DBeaver,您可以像在常规电子表格中一样处理数据,根据来自不同数据存储的记录创建分析报告,以适当的格式导出信息(sysin)。对于高级数据库用户,DBeaver建议使用强......