Live2D

Solution -「ARC 104C」Fair Elevator

Description

  Link.

  数轴从 12n 的整点上有 n 个闭区间。你只知道每个区间的部分信息(可能不知道左或右端点,或者都不知道),问是否存在满足已知信息的 n 个区间,满足:

  • 每个整点是恰好一个区间的端点。
  • 所有包含同一个整点的区间长度相等。

  输入信息可能不合法

  n100

Solution

  老细节题了。(

  考虑数轴上连续的一段区间 [l,r],记 L=rl+1,若该区间内能够满足条件,则显然有:

  • 2|L
  • [i,i+L2] 可以存在于区间集合中。

  记 f(i) 表示 1i 能否合法,O(n3) 暴力转移即可。

  但这个不是难点,if-else 才是难点 qwq。

  • 输入可能多点重合,判否。
  • 若有区间 [l,?][?,r],注意不能让 lr 组成 [l,r]

  对于第二点,一组 CF 上的 hack 数据为:

2
1 -1
-1 3

answer: No

  多堆几个 if-else 就 A 啦!(

Code

/* Clearink */

#include <cstdio>
#include <cstdlib>
#include <assert.h>

const int MAXN = 200;
int n, match[MAXN + 5];
bool f[MAXN + 5], vis[MAXN + 5];

inline bool check ( const int l, const int r ) {
	int stp = r - l + 1 >> 1; // i -> i + stp.
	for ( int i = l, j; ( j = i + stp ) <= r; ++ i ) {
		bool acci = 1 <= match[i] && match[i] <= n << 1;
		bool accj = 1 <= match[j] && match[j] <= n << 1;
		if ( match[i] == -1 || ( acci  && match[i] ^ j )
		|| match[j] == ( n << 1 | 1 ) || ( accj && match[j] ^ i )
		|| ( !acci && !accj && match[i] && match[j] ) ) {
			return false;
		}
	}
	return true;
}

int main () {
	scanf ( "%d", &n );
	for ( int i = 1, a, b; i <= n; ++ i ) {
		scanf ( "%d %d", &a, &b );
		if ( ~a && ~b && a >= b ) return puts ( "No" ), 0;
		if ( ~a && ~b ) match[a] = b, match[b] = a;
		else if ( ~a ) match[a] = n << 1 | 1;
		else if ( ~b ) match[b] = -1;
		if ( ~a ) {
			if ( vis[a] ) return puts ( "No" ), 0;
			vis[a] = true;
		}
		if ( ~b ) {
			if ( vis[b] ) return puts ( "No" ), 0;
			vis[b] = true;
		}
	}
	f[0] = true;
	for ( int i = 2; i <= n << 1; i += 2 ) {
		for ( int j = 0; j < i && !f[i]; j += 2 ) {
			f[i] = f[j] && check ( j + 1, i );
		}
	}
	puts ( f[n << 1] ? "Yes" : "No" );
	return 0;
}
posted @   Rainybunny  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示