链接:https://codeforces.com/problemset/problem/1418/B
题意:
给定数组a,有些数锁定,有些没锁定,没锁定的可以任意调换顺序;定义K是该数组满足前缀和P[j]<0的最大的数,现在要求变换数组使K最小;
题解:
K要最小,就是前面的前缀和要尽可能大,那就把大的数往前面放;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, i, a[105], b[105], c[105];
int cnt = 0;
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
for (i = 0; i < n; i++)
{
cin >> b[i];
if (b[i]==0)//把能动的存起来
{
c[cnt++] = a[i];
}
}
sort(c, c + cnt);
cnt--;
for (i = 0; i < n; i++)
{
if (b[i])
cout << a[i] << " ";
else
cout << c[cnt--] << " ";
}
cout << endl;
}
return 0;
}
|