CF1989C Two Movies 题解

思路:

考虑贪心。

这题分两种情况:

  1. $a_i\ne b_i$,这时选最大的加为最优。

  2. $a_i= b_i$,用一个数组先存起来,最后再将小于零的加给大的,大于零的加给小的,使小的尽量大。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<bits/stdc++.h>
using namespace std;
int t,n,a[11451419],b[11451419],c[11451419],aa,bb,ii;
int maxn,minn;
int main(){
cin>>t;
while(t--){
cin>>n;
bb=aa=0;
ii=0;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
for(int i=1;i<=n;i++){
if(a[i]>b[i]){
aa+=a[i];
}
else if(b[i]>a[i]){
bb+=b[i];
}
else{
c[++ii]=a[i];
}
}
for(int i=1;i<=ii;i++){
if(c[i]>0){
if(aa>=bb) bb+=1;
else aa+=1;
}
if(c[i]<0){
if(aa>=bb) aa-=1;
else bb-=1;
}
}
cout<<min(aa,bb)<<'\n';
}
return 0;
}