P16250 [蓝桥杯 2026 省研究生组] 人类识别审查

传送门

题目描述

2145 年,全球通过《合成人管控法案》,所有疑似伪装的高仿生 AI 都必须接受"人类识别审查"。

新港区的审讯室内,小蓝盯着桌面投影出来的名单:房间里一共有 N N N 个"智能体",外表与行为几乎与人类无异,其中有些是真正的人类,有些则是伪装的人形 AI。

审查规则如下:

  1. 设房间里真正的人类数量为 K K K( K K K 为整数,满足 0 ≤ K ≤ N 0 \leq K \leq N 0≤K≤N)。
  2. 第 i i i 个智能体给出一段证词:"人类数量在区间 a i , b i a_i, b_i ai,bi 内。"
  3. 若某个智能体是真正的人类,则它的证词必定为真,即 a i ≤ K ≤ b i a_i \leq K \leq b_i ai≤K≤bi。
  4. 若某个智能体是伪装的 AI,则它的证词必定为假,即 K ∉ a i , b i K \notin a_i, b_i K∈/ai,bi。

作为小蓝的助手,请你分析所有证词,计算出房间里最多可能有多少个人类(即最大可能的 K K K 值)。如果不存在任何逻辑自洽的 K K K,输出 − 1 -1 −1。

输入格式

第一行输入一个整数 N N N,表示房间里智能体的数量。

接下来 N N N 行,每行输入两个整数 a i , b i a_i, b_i ai,bi,表示第 i i i 个智能体声称的人类数量区间。

输出格式

输出一个整数,表示满足条件的最大 K K K;若无解输出 − 1 -1 −1。

输入输出样例 #1

输入 #1

复制代码
3
1 2
2 3
3 3

输出 #1

复制代码
2

输入输出样例 #2

输入 #2

复制代码
3
1 1
1 1
1 1

输出 #2

复制代码
0

输入输出样例 #3

输入 #3

复制代码
1
0 0

输出 #3

复制代码
-1

说明/提示

【评测用例规模与约定】

对于 30 % 30\% 30% 的评测用例, 1 ≤ N ≤ 10 3 1 \leq N \leq 10^3 1≤N≤103, 0 ≤ a i ≤ b i ≤ N 0 \leq a_i \leq b_i \leq N 0≤ai≤bi≤N;

对于所有评测用例, 1 ≤ N ≤ 10 5 1 \leq N \leq 10^5 1≤N≤105, 0 ≤ a i ≤ b i ≤ N 0 \leq a_i \leq b_i \leq N 0≤ai≤bi≤N。

题意

一个房间里有 N N N 个"智能体",在这个房间中的"智能体"有两种身份:

  1. 人类: K K K 个。
  2. AI : N − K N - K N−K 个。

且第 i i i 个智能体给出一段证词:"人类数量在区间 a i , b i a_i,b_i ai,bi 内。"

若它是人类则是真的,否则是假的。

求 K K K 最大为多少,若没有任何逻辑自洽的 K K K 则输出 -1。

思路

此题首先定义:

cnt[K] 为说真话的智能体数量(即证词区间包含 K K K 的人数)。

简单思考一下,可知合法的 K K K 必定等于 cnt[K]。

这样就可以简单暴力了,但是暴力复杂度高达 Θ ( N 2 ) \Theta(N^2) Θ(N2),肯定会炸,所以考虑优化。

那就要使用差分数组 ,通过差分在 Θ ( N ) \Theta(N) Θ(N) 的时间复杂度下求出所有 cnt[K]。

代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,d[100005],cnt[100005],tot;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int a,b;
		cin>>a>>b;
		d[a]++;
		d[b+1]--;//差分
	}
	for(int k=0;k<=n;k++)
	{
		tot+=d[k];
		cnt[k]=tot;//累加求出 cnt[K]
	}
	for(int k=n;k>=0;k--)//因为求最大 K 所以倒序枚举,求到即最优
		if(cnt[k]==k)//合法条件
		{
			cout<<k;
			return 0;
		}
	cout<<-1;//若最后都没找到则输出 -1
	return 0;
}
相关推荐
GG.WinGel2 天前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
GG.WinGel3 天前
质数数目(蓝桥杯练习题)
java·数据结构·算法·青少年编程·蓝桥杯
Tsuki_tl4 天前
【优选算法 — 双指针】经典例题题解+算法总结
算法·蓝桥杯·力扣·刷题·双指针·1024程序员节·优选算法
十二6 天前
【洛谷题解】P1115 最大子段和(前缀和 + 维护最小前缀)
数据结构·c++·算法·蓝桥杯
青少儿编程课堂8 天前
2026蓝桥杯青少组:校园飞鸟穿越赛解析
蓝桥杯·scratch·少儿编程·图形化编程·蓝桥杯青少组
aqiu11111110 天前
蓝桥杯真题复盘:Fibonacci 数列与黄金分割(C++ 算法详解)
c++·算法·蓝桥杯
aqiu11111111 天前
题目总结:[P8752 [蓝桥杯 2021 省 B2] 特殊年份]
蓝桥杯
青少儿编程课堂11 天前
2026蓝桥杯青少组:校园防疫大作战解析
蓝桥杯·scratch·少儿编程·图形化编程·蓝桥杯青少组
MoRanzhi120313 天前
106.正则问题(分治)
python·算法·正则表达式·蓝桥杯·递归·分治算法·字符串处理
MoRanzhi120313 天前
122.四平方和(暴力枚举)
python·数学·算法·蓝桥杯·完全平方数·暴力枚举·四平方和定理