Solution -「ARC 104C」Fair Elevator
\(\mathcal{Description}\)
Link.
数轴从 \(1\sim 2n\) 的整点上有 \(n\) 个闭区间。你只知道每个区间的部分信息(可能不知道左或右端点,或者都不知道),问是否存在满足已知信息的 \(n\) 个区间,满足:
- 每个整点是恰好一个区间的端点。
- 所有包含同一个整点的区间长度相等。
输入信息可能不合法。
\(n\le100\)。
\(\mathcal{Solution}\)
老细节题了。(
考虑数轴上连续的一段区间 \([l,r]\),记 \(L=r-l+1\),若该区间内能够满足条件,则显然有:
- \(2|L\)。
- \([i,i+\frac{L}2]\) 可以存在于区间集合中。
记 \(f(i)\) 表示 \(1\sim i\) 能否合法,\(\mathcal O(n^3)\) 暴力转移即可。
但这个不是难点,if-else 才是难点 qwq。
- 输入可能多点重合,判否。
- 若有区间 \([l,?]\) 和 \([?,r]\),注意不能让 \(l\) 和 \(r\) 组成 \([l,r]\)。
对于第二点,一组 CF 上的 hack 数据为:
2
1 -1
-1 3
answer: No
多堆几个 if-else 就 A 啦!(
\(\mathcal{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;
}
Solution -「ARC 104C」Fair Elevator的更多相关文章
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Solution -「ARC 110D」Binomial Coefficient is Fun
\(\mathcal{Description}\) Link. 给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\ ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- Solution -「ARC 126F」Affine Sort
\(\mathcal{Description}\) Link. 给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
- Solution -「ARC 125E」Snack
\(\mathcal{Description}\) Link. 把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...
- Solution -「ARC 058C」「AT 1975」Iroha and Haiku
\(\mathcal{Description}\) Link. 称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...
随机推荐
- HDU 2084 数塔 (动态规划DP)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目分析:此题采用动态规划自底向上计算,如果我们要知道所走之和最大,那么最后一步肯定是走最后一排 ...
- Redhat 如何使用yum 源(转)
1.需要把Redhat注册的信息给解决掉 This system is not registered with an entitlement server. You can use subscript ...
- 《剑指offer》面试题55 - I. 二叉树的深度
问题描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15 ...
- linux软件安装命令
rpm命令安装 安装 rpm -ivh 包全名(如果当前目录不是软件包所在目录,就需要加绝对路径) -i 安装 -v 显示详细信息 -h 显示进度 升级 rpm -Uvh 包全名 -U 升级 卸载 r ...
- Redis的几点积累
1.Redis比memcache快 Redis具有事务,持久化等机制,但是它还能做到高性能,原因包括如下: Libevent.和Memcached不同,Redis并没有选择libevent.Libev ...
- fidder无法下载证书的最佳解决办法
为什么有的小伙伴安装fidder不好使,手机无法下载证书? 1.安装一定要去官网安装! 一定要去官网安装! 一定要去官网安装!官方网址:https://www.telerik.com/download ...
- ansible lineinfile 关闭selinux
- linux单用户模式修改密码与系统启动级别
目录 一:系统启动级别 二:单用户模式修改密码 一:系统启动级别 系统启动级别: 0 关机 1 单用户模式(无法通过xshell方式使用)(虚拟机操作)(系统云服务商后台) 2 多用户无网络模式 3 ...
- 学习JAVAWEB第十一天
今天以及明天做登录案例,复习所学知识.
- webStorm关于ESlint6语法格式化解决方案
方式1: 下载ESLint6 格式化插件(格式化蛋痛,有点卡,而且必须先保存) 方式2:更改快捷键 在设置中,将下面这个格式化选项设置快捷键即可 到设置中的下面这个选项找修改即可