首页 > 其他分享 >CF85E Guard Towers

CF85E Guard Towers

时间:2024-05-02 13:23:36浏览次数:24  
标签:二分 return Towers int Guard include col CF85E define

CF85E Guard Towers

二分+二分图

看到最大值最小,考虑二分。二分距离最大值,限制了某些点对不能分到同一组,明显的二分图模型。

用这些限制条件建图,跑二分图染色,看是否能分为二分图即可。

考虑方案数的计算,题目中方案数不同的要求是第一组的集合不同就为不同方案,所以跑完二分图后,图分为若干连通块,连通块中有若干黑点和白点,可以让黑点在第一组的集合也可以让白点在第一组,所以若连通块个数为 \(x\),那么方案数就是 \(2^x\)。

复杂度 \(O(n^2\log n)\)。感觉一点跑不过去啊

#include <iostream>
#include <vector>
#include <cstdio>
#include <cmath>
#include <string>
#include <array>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
#include <cstdlib>
#include <bitset>
#include <string.h>
#define pii std::pair<int, int>
#define fi first
#define se second
#define pb push_back

typedef long long i64;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f3f;
const int N = 5e3 + 10, mod = 1e9 + 7;
int n;
i64 ans, ans2, cnt;
int col[N];
struct node {int x, y;} a[N];
std::vector<int> e[N];
bool dfs(int u, int fa, int co) {
	col[u] = co;
	for(auto v : e[u]) {
		if(v == fa) continue;
		if(col[v] == -1) {
			if(!dfs(v, u, co ^ 1)) return 0;
		} else if(col[u] == col[v]) return 0;
	}
	return 1;
}
int dis(node a, node b) {
	return abs(a.x - b.x) + abs(a.y - b.y);
}
bool check(int x) {
	cnt = 0;
	memset(col, -1, sizeof(col));
	for(int i = 1; i <= n; i++) e[i].clear();
	for(int u = 1; u <= n; u++) {
		for(int v = u + 1; v <= n; v++) {
			if(dis(a[u], a[v]) > x) e[u].pb(v), e[v].pb(u);
		}
	}
	for(int i = 1; i <= n; i++) {
		if(col[i] == -1) {
			cnt++;
			if(!dfs(i, 0, 0)) {
				return 0;
			}
		}
	}
	ans2 = cnt;
	return 1;
}
i64 qpow(i64 a, i64 b) {
	i64 ret = 1;
	while(b) {
		if(b & 1) ret = ret * a % mod;
		a = a * a % mod;
		b >>= 1;
	} 
	return ret;
}
void Solve() {
	std::cin >> n;
	for(int i = 1; i <= n; i++) {
		std::cin >> a[i].x >> a[i].y;
	}
	int l = 0, r = 1e4;
	while(l <= r) {
		int mid = (l + r) >> 1;
		if(check(mid)) r = mid - 1, ans = mid;
		else l = mid + 1;
	}
	std::cout << ans << "\n" << qpow(2, ans2) << "\n";
}
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
	Solve();

	return 0;
}

标签:二分,return,Towers,int,Guard,include,col,CF85E,define
From: https://www.cnblogs.com/FireRaku/p/18170114

相关文章

  • JS代码混淆器:iPaGuard — 让你的代码看起来令人头大
     在当今互联网时代,JavaScript作为一种广泛应用的编程语言,扮演着至关重要的角色。然而,随着网络技术的不断发展,JavaScript代码也面临着日益增加的安全威胁。为了保护JavaScript代码免受未经授权的复制、修改和逆向工程,开发者需要借助专业的工具和技术。其中,iPaGuard就是一款......
  • IPAguard–iOS代码混淆工具(免费)
     IPAguard是一款为iOS开发者设计的代码混淆工具,旨在为开发者提供方便制作和分析马甲包的解决方案。通过高效的匹配算法,IPAguard可以在保证代码混淆的同时,保证编译后的代码质量,减少了因混淆引起的bug,使得开发者能够更加专注于App的功能实现与优化。 TODOLIST以下是IPAguard......
  • 使用Proguard插件对代码混淆
    背景:最近项目中需要将jar包提供给第三方去用,担心代码被反编译偷取源码,所以需要对现在代码进行混淆。原理:使用Proguard对代码进行混淆。其实Proguard混淆代码的原理很简单,java代码在编译后会生成许多.class文件,这些.class文件可以被反编译(常用gui反编译等),编译后原本的代码就......
  • 你真会判断DataGuard的延迟吗?
    这是一个比较细节的知识点,但必须要理解这个才能准确判断OracleADG的延迟情况。以前做运维工作时,记得是要同时重点关注v$dataguard_stats视图中的几个字段的值,分别是:NAME、VALUE、TIME_COMPUTED、DATUM_TIME。本文先不考虑v$dataguard_stats视图没有数值显示的特殊情况,只针对当v......
  • 五款常用在线JavaScript加密混淆工具详解:jscrambler、JShaman、jsfack、ipaguard和jje
    摘要本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具,包括jscrambler、JShaman、jsfack、freejsobfuscator和jjencode。通过对这些工具的功能及使用方法进行详细解析,帮助开发人员更好地保护和加密其JavaScript代码,提升网站的安全性和保密性。 引言在当今......
  • C#代码混淆器 ipaguard 的优势与使用
     摘要本文探讨了iOS开发的优势、费用以及软件开发方面的相关内容。通过分析iOS开发所采用的编程语言、开发环境、用户界面设计、应用审核流程以及应用领域等方面,展示了iOS开发的诸多优势和特点。虽然iOS开发具有高用户体验、统一的硬件和软件环境、良好的市场份额等优势,但也存......
  • nestJs中 Guards ,Interceptors ,Pipes ,Controller ,Filters的执行顺序
    执行顺序:Guards(守卫):Guards是最先执行的中间件,用于确定是否允许请求继续处理。Guards在请求被路由到控制器之前执行,通常用于身份验证、角色检查或权限验证。如果Guards返回一个布尔值 false 或者抛出一个异常,请求处理流程将终止,不会执行后续的Pipes、Interceptors或控......
  • std::lock_guard 介绍
    std::lock_gurad是C++11中定义的模板类。定义如下:template <class Mutex>class lock_guard;lock_guard对象通常用于管理某个锁(Lock)对象,因此与MutexRAII相关,方便线程对互斥量上锁,即在某个lock_guard对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而lo......
  • Oracle Data Guard Gap日志间隙SCN增量备份恢复案例分享
            本期将为大家分享”OracleDataGuardGap日志间隙SCN增量备份恢复”案例。        欢迎关注“数据库运维之道”公众号,一起学习数据库技术!        关键字:DataGuard日志间隙、RedoGap、ArchiveGap、DataGuardGap、ORA-00308、ORA-2703......
  • 三款.NET代码混淆工具比较分析:ConfuserEx、Obfuscar和Ipa Guard
    ​随着.NET应用程序的广泛应用,保护知识产权和防止逆向工程的需求逐渐增长。本文将详细介绍三款知名的.NET代码混淆工具:ConfuserEx、Obfuscar和IpaGuard,帮助读者全面了解其功能特点和应用场景。一、ConfuserExConfuserEx是一个.NET代码混淆工具,支持多种混淆技术,包括控制流混淆......