代码错哪了啊,求大佬指正
  • 板块题目总版
  • 楼主郑楠淳2011
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/8/15 20:53
  • 上次更新2023/11/3 03:31:39
查看原帖
代码错哪了啊,求大佬指正
1035016
郑楠淳2011楼主2023/8/15 20:53
#include<iostream>
using namespace std;
int n,m,a[1000009],b[1000009];
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>a[i];
	}
	
	for(int i=1;i<=n;i++){
		b[i]=1;
	}
	for(int i=1;i<=n;i++){
		b[a[i]]=0;
		b[a[i]-1]=0;
		b[a[i]-2]=0;
		b[a[i]+1]=0;
		b[a[i]+2]=0;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(b[i]==0) ans++;
	}
	cout<<ans;
	return 0;
}

闪电

题目描述

nn 棵树从左至右排成一排,我们将它们从左至右依次标号为 1∼n1 \sim n。

现在有 mm 道雷依次劈下。你得知了一串序列 a1,⋯ ,ama _ 1, \cdots, a _ m。对于第 ii 道雷,它会劈中第 aia_i 棵树,也会劈中这棵树前面 22 棵和后面 22 棵树(如果有的话)。

在 mm 道雷劈完后,你想要知道,被劈过至少一次的树有几个。

输入格式

输入共两行。

第一行为两个整数 n,mn, m,代表树数量和雷的数量。

第二行为 mm 个整数 a1,⋯ ,ama _ 1, \cdots, a _ m,代表题面中的序列。

输出格式

输出共一行。

输出一行一个整数,被劈过至少一次的树的数量。

样例 #1

样例输入 #1

17 1
4

样例输出 #1

5

样例 #2

样例输入 #2

10 1
2

样例输出 #2

4

样例 #3

样例输入 #3

9 3
3 7 7

样例输出 #3

9

提示

样例 1 解释

被劈中的树是 2,3,4,5,62, 3, 4, 5, 6 号,共 55 个。

样例 2 解释

被劈中的树是 1,2,3,41, 2, 3, 4 号,共 44 个。请注意 a1−2=0a _ 1 - 2 = 0 号树不存在,也不应被劈中。

样例 3 解释

被劈中的树是 1,2,3,4,5,6,7,8,91, 2, 3, 4, 5, 6, 7, 8, 9 号,共 99 个。

请注意尽管部分树被劈了两次甚至三次,对这些树我们仍然只计数一次。

数据规模与约定

  • 对于前 10%10\% 的数据,保证 n=1n = 1。
  • 对于前 30%30\% 的数据,保证 m=1m = 1。
  • 对于另外 20%20\% 的数据,保证 m≤n−2m \leq n - 2 且 ∀i∈[1,m],ai=i\forall i \in [1, m], a _ i = i。
  • 对于 100%100\% 的数据,保证 1≤n,m≤1061 \leq n,m \leq 10 ^ 6,1≤ai≤n1 \leq a _ i \leq n。
2023/8/15 20:53
加载中...