描述
【题目描述】
外星幼儿园的小朋友被老师们布置了堆积成山的作业。
外星幼儿园有很多科目需要学习,每个科目都有可能布置作业。但是作业必须严格按照顺序完成。
老师给作业分配的量非常合理,每一个作业需要一天的时间完成。
但是小朋友们做作业存在消极怠工的现象,假设今天做完了科目k的作业,那么在一段时间m天之内,他都不想做科目k的作业了。
现在给你完成作业的顺序,帮帮小朋友们看看他最快能够多少天完成所有作业
【输入格式】
第一行有两个整数 n和m,n表示作业的总数,m表示消极怠工期的天数 第二行输入一个数组 works,数组长度为 n,数字用空格分隔,代表每个作业的科目
【输出格式】
输出一行,共一个数,表示最快能够多少天完成所有作业
【样例输入1】
6 3 1 2 1 2 3 1
【样例输出1】
9
【样例解释1】
在 9 个单位时间完成所有作业的一种方法是: 第 1 天:完成作业 0 。 第 2 天:完成作业 1 。 第 3 天:消极怠工。 第 4 天:消极怠工。 第 5 天:完成作业 2 。 第 6 天:完成作业 3 。 第 7 天:消极怠工。 第 8 天:完成作业 4 。 第 9 天:完成作业 5 。 可以证明无法少于 9 天完成所有作业。
【数据范围】
对于20%的数据来说 1 <= n <= 100 1 <= works[i] <= 100 1 <= m <= n 对于100%的数据来说 1 <= n <= 1e5 1 <= works[i] <= 1e9 1 <= m <= n
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[100010];
map<int,int>mp;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
int res=0;
for (int i=1;i<=n;i++)
{
cin>>a[i];
if (mp[a[i]]==0||mp[a[i]]+m<i)
{
res++;
mp[a[i]]=i;
}
else
{
int r=mp[a[i]]+m+1;
mp[a[i]]=r;
res=r;
}
}
cout<<res;
return 0;
}