第二个任务输出序列是正确的!但是就是不会计算最短时间,请大佬具体解释一下怎么算最短时间。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <cstdlib>
#include <utility>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <list>
#include <set>
using namespace std;
const int maxn=1e5;
using ll=long long;
struct J{
ll a,b,m,id;
bool operator<(const J &nj)const
{
return m<nj.m;
}
}a[maxn+10];
ll R[maxn+10],n;
int main()
{
scanf("%lld",&n);
for(int i=1; i<=n; ++i) {
scanf("%lld",&a[i].a);
a[i].id=i;
}
for(int i=1; i<=n; ++i) {
scanf("%lld",&a[i].b);
}
for(int i=1; i<=n; ++i) {
a[i].m=min(a[i].a,a[i].b);
}
sort(a+1,a+1+n);
int i=1,j=n;
for(int k=1; k<=n; ++k) {
if(a[k].m==a[k].a) {
/*error1*/
R[i++]=a[k].id;
} else {
R[j--]=a[k].id;
}
}
ll A=0,B=0;
/*这里是照着课本抄的,也没有过样例,输出了39而不是34*/
for(i=1; i<=n; ++i) {
A+=a[R[i]].a;B=max(A,B);B+=a[R[i]].b;
}
printf("%lld\n",B);
for(i=1; i<=n; ++i) {
printf("%lld ",R[i]);
}
return 0;
}