桶排序
以洛谷B3691 [语言月赛202212] 狠狠地切割(Easy Version)为例
代码如下
#include<bits/stdc++.h>
using namespace std;
int n, m, a[5000004], b[5000007], ans = 1, edge, cnt;//cnt=片段
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)scanf("%d", &a[i]);
for (int i = 1; i <= m; i++) {
scanf("%d", &b[i]);
for (int j = 1; j <= n; j++)if (b[i] == a[j])a[j] = 0;
}
for (int i = 1; i <= n; i++) {
if (a[i] == 0) {
if (cnt)ans++;//有结点
cnt = 0;//节点清零
} else cnt++;
}
if(cnt)ans++;//对最后结点特殊处理
cout << ans-1;//骗分
return 0;
}
P.S.这道题还要用快读