\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 ( mp 是 map , 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} 了.
完结撒花
记住:
请 \underline{认准} 非 * \textcolor {blue} {官方} * 正版⁰
- 点赞
- 收藏
- 投币
0
投票人