RT,#7没过,答案多1,代码:
#include<cstdio>
#include<algorithm>
#define rin register int
using namespace std;
struct thing{
int a,b,num;
}t[1005];
inline bool cmp(thing a,thing b){
return a.b>b.b;
}
int main(){
// freopen("prod.in","r",stdin);
// freopen("prod.out","w",stdout);
int n,MIN=1,ans;
scanf("%d",&n);
for(rin i=1;i<=n;i++){
scanf("%d",&t[i].a);
if(t[MIN].a>t[i].a)
MIN=i;
t[i].num=i;
}
for(rin i=1;i<=n;i++)
scanf("%d",&t[i].b);
swap(t[MIN],t[1]);//将a时间最少的放到第一个
sort(t+2,t+1+n,cmp);
ans=t[1].a;//ans是时间
int x=0,y=0;//x是a的时间,y是b的时间
for(rin i=1;i<=n;i++){
x+=t[i+1].a;
y+=t[i].b;
if(x>y){
ans+=x-y;
x=y;
}
}
ans+=y;
printf("%d\n",ans);
for(rin i=1;i<=n;i++)
printf("%d ",t[i].num);
return 0;
}
数据#7:
in:
46 32 12 34 58 76 45 43 42 41 40 90 87 86 85 89 78 80 42 31 47 59 63 24 25
26 27 28 29 30 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4
3 2 1 32 12 23 24 34 55 66 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 21 23
24 24 25 23 29 27 31 22 34 33 35 36 37 18 19 21 22 23 24 32 22 44 31 35 39
2 12 12 23 24 25 61 67 71 78 18 13 12 15 16 17 19 34 30 97 32 45 31 71 34 98
11 100 2 99 100 6 9 8 6 4 10 9 8 9 10 91 21 23 24 15 16 17 18 19 20 21 22 23
34 35 36 37 38 39 31 11 12 13 14 15 16 17 18 19 20 31 32 33 44 45 46 47 48 1
4 5 8 9 90 44 56 57 58 59 60 21 23 25 27 29 90 23 54 76 90 200 31 23 33 43 56 78 5 17 19
21 21 33 45 48 78 76 65 70 80 90 87 75 64 32 45 31 32 33 50 40 3 5 8 9 10 11
21 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 1 2 3 4 5 6
7 8 9 10 11 12 13 14 15 16 17 29 23 45 58 3 21 22 24 25 27
out:
3135
55 54 53 52 51 50 63 49 64 48 65 47 46 66 67 68 3 57 69 70 71 72 73 74 93 75 94 76 78 35 77 95 34 100 79 83 97 58 24 59 32 80 98 81 25 82 26 27 28 29 30 89 60 4 90 91 92 11 14 13 12 1 62 61 22 2 23 99 10 9 8 96 56 21 15 20 19 18 16 6 17 7 31 41 45 88 37 42 44 87 43 38 36 39 86 85 40 33 5 84
求各位大佬指点一下。