请教大佬!样例也过不了!
查看原帖
请教大佬!样例也过不了!
363491
U_92_Uranium楼主2022/9/1 20:04

第二个任务输出序列是正确的!但是就是不会计算最短时间,请大佬具体解释一下怎么算最短时间。

#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;                           
}                                                    

2022/9/1 20:04
加载中...