题目一 acwing 4416. 缺少的数
给定一个长度为 n−1 的数列 a1,a2,…,an−1。
数列中的元素两两不同,且都在 1∼n 的范围内。
请你计算,1∼n 中的哪一个数没有在数列中出现过。
输入格式
第一行包含一个整数 n。
第二行包含 n−1 个整数 a1,a2,…,an−1。
输出格式
输出 1∼n 中没有在数列中出现过的数。
数据范围
前三个测试点满足 2≤n≤10。
所有测试点满足 2≤n≤105,1≤ai≤n。
输入样例:
10
3 8 10 1 7 9 6 5 2
输出样例:
4
分析
这里给定的数组中的数字是连续的,数字的范围是1e5,所以这里我们可以利用哈希表存储出现的数字,然后遍历整个哈希表找出没有出现的数字
代码部分
#include <bits/stdc++.h>
using namespace std;
int main (void)
{
int n;
cin>>n;
vector<bool> hash(n+1,0);
for(int i=1;i<=n-1;i++)
{
int x;
cin>>x;
hash[x]=1;
}
for(int i=1;i<=n;i++)
{
if(hash[i]==0)
{
cout<<i;
break;
}
}
return 0;
}
题目二 acwing4417. 选区间
给定 n 个一类区间 (l1,i,r1,i)。
给定 m 个二类区间 (l2,i,r2,i)。
请你从一类区间中挑选一个区间,从二类区间中挑选一个区间。
要求,选出的两个区间之间的距离尽可能大。
请你输出最大可能距离。
关于两区间 (l1,r1) 和 (l2,r2) 之间的距离,我们规定:
如果两区间存在交集,则区间距离为 0。
如果两区间不存在交集,则区间距离为 |i−j| 的最小可能值,其中 l1≤i≤r1,l2≤j≤r2。
输入格式
第一行包含一个整数 n。
接下来 n 行,每行包含两个整数 l1,i,r1,i。
再一行包含一个整数 m。
最后 m 行,每行包含两个整数 l2,i,r2,i。
输出格式
一个整数,表示最大可能距离。
数据范围
前三个测试点满足 1≤n,m≤10。
所有测试点满足 1≤n,m≤2×105,1≤l1,i≤r1,i≤109,1≤l2,i≤r2,i≤109。
输入样例1:
3
1 5
2 6
2 3
2
2 4
6 8
输出样例1:
3
输入样例2:
3
1 5
2 6
3 7
2
2 4
1 4
输出样例2:
0
分析
首先我们来解读一下题意,就是让我们在一类区间中找出一个区间,二类区间中找出一个区间,让这两个区间的距离最大,两个区间的距离为左边的区间的右端点到右边的区间的左端点的距离,如果两个区间有重叠的部分那这两个区间的距离为0
那无非就是两种情况
第一种:第一类的区间中最小的右端点到第二类区间最大的左端点的距离
第二种:第二类的区间中最小的右端点到第一类区间最大的左端点的距离
我们分别用两次循环找出这四个值,然后找出其中最大的距离即可
代码部分
#include <bits/stdc++.h>
using namespace std;
int INF=1e9;
int main (void)
{
int n,m;
cin>>n;
int amax=-INF,amin=INF;
while(n--)
{
int l,r;
scanf("%d%d",&l,&r);
amax=max(amax,l);
amin=min(amin,r);
}
int bmax=-INF,bmin=INF;
scanf("%d ",&m);
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
bmax=max(bmax,l);
bmin=min(bmin,r);
}
// printf("%d %d %d %d ",amax,amin,bmax,bmin);
int ans=max(bmax-amin,amax-bmin);
if(ans<0)
cout<<0;
else cout<<ans;
return 0;
}
题目三 acwing4418. 选元素
给定一个长度为 n 的整数序列 a1,a2,…,an。
请你从中挑选 x 个元素,要求:
原序列中的每一个长度为 k 的连续子序列都至少包含一个被选中的元素。
满足条件 1 的前提下,所选 x 个元素的相加之和应尽可能大。
输出最大可能和。
输入格式
第一行包含三个整数 n,k,x。
第二行包含 n 个整数 a1,a2,…,an。
输出格式
如果无法满足题目要求,则输出 −1。
否则,输出一个整数,表示所选元素的最大可能和。
数据范围
前三个测试点满足 1≤k,x≤n≤6。
所有测试点满足 1≤k,x≤n≤200,1≤ai≤109。
输入样例1:
5 2 3
5 1 3 10 1
输出样例1:
18
输入样例2:
6 1 5
10 30 30 70 10 10
输出样例2:
-1
输入样例3:
4 3 1
1 100 1 1
输出样例3:
100
分析
序列型动态规划,三维状态数组
等学了动态规划部分回来做