题解:P10605 下头论文
本题是一道模拟题
题意
有
求最少能在几天后完成所有任务。
思路
因为要求最短的时间,所以我们不要浪费掉任何一个可以完成当前任务的空闲时间。空闲时间就是在
代码
#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[100005], b[100005];
int ans = 1;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= m; i ++)
cin >> b[i];
int i = 1, now = 1;
while (i <= n) // 遍历任务
{
bool f = 1;
for (int j = now; j <= m; j++) // 遍历忙碌的天
{
if (b[j] > ans + a[i] - 1)
break;
if (b[j] < ans)
break;
if (b[j] >= ans && b[j] <= ans + a[i] - 1)
{
f = 0;
ans = b[j] + 1;
now = j + 1;
break;
}
}
if (f == 1)
{
ans = ans + a[i];
i++;
}
}
cout << ans - 1 << "\n";
return 0;
}
/*
至于为什么要 ans - 1
我们在 ans += ans + a[i];
是将 ans 变为任务结束的后一天来避免有重叠的情况
所以判断和输出时要 -1,而加入时间时不 -1
*/
AC记录