写作业Ⅰ题解~~

\Huge c++模拟版

先看题面:

题目描述

【题目描述】

外星幼儿园的小朋友被老师们布置了堆积成山的作业。
外星幼儿园有很多科目需要学习,每个科目都有可能布置作业。但是作业必须严格按照顺序完成。
老师给作业分配的量非常合理,每一个作业需要一天的时间完成。
但是小朋友们做作业存在消极怠工的现象,假设今天做完了科目k的作业,那么在一段时间m天之内,他都不想做科目k的作业了。

现在给你完成作业的顺序,帮帮小朋友们看看他最快能够多少天完成所有作业

【输入格式】

第一行有两个整数 n和m,n表示作业的总数,m表示消极怠工期的天数 第二行输入一个数组 works,数组长度为 n,数字用空格分隔,代表每个作业的科目

【输出格式】

输出一行,共一个数,表示最快能够多少天完成所有作业

看到这题上去是不是两眼无神,但如果告诉你这题用模拟,可能一小部分表示

啊,没有题解,没有人帮怎么写啊

那不巧了吗——

首先使用 map 来存储每个科目还有几天可以好. 那么 每次新的科目就是还有 m 天,计算机话: mp[ a[ i ] ] = m

之后一个个枚举,用 for 循环就够,进入分支剧情,如果 mp[a[i]]ㅤandㅤmp[a[i]] - res > 0 ( mpmap , a[i] 是输入数组, res 是 答案) 那么代表这里这个小朋友这里要罢工.休息 mp[a[i]]-res 天,为什么要减去 res 因为如果迭代器的话,会 \textcolor{skyblue}{TLE} 只能用一加一减来抵消.(老师:哪来呢么个性,再不交开除)

替他情况下天数加一,把 mp[a[i]] 设置为 m

附上源代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 10;
int n, m;
map<int, int> mp;
int a[maxn];
int res;
signed main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++) {
		if (mp[a[i]] && mp[a[i]] - res > 0) {
			res += mp[a[i]] - res;
			mp[a[i]] = m + res;
		}
		res++;
		mp[a[i]] = m + res;
	}
	cout << res;
	return 0;
}

这道题就 \textcolor{green}{AnswerCoarse} 了.

:fireworks: 完结撒花 :fireworks:

记住:

\underline{认准} * \textcolor {blue} {官方} * :clown_face:

  • 点赞 image
  • 收藏 image
  • 投币 image
0 投票人
6 个赞

顶!!!

2 个赞

下次需要打广告私聊我

2 个赞

\LaTeX 炸了唉