题解:脑筋急转弯,好好想想思路就出来了m等于1时,差值为0;m等于2时两个数相减绝对值等于自身;大于2时绝对值最大为2倍
#include<iostream>
#include<algorithm>
#include<list>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
int T;
cin >> T;
while (T--)
{
int m, n;
cin >> m >> n;
if (m == 1)
cout << 0 << endl;
if (m == 2)
cout << n << endl;
if (m > 2)
cout << 2 * n << endl;
}
}
题解:求第一个数组相加的最大值,k是最多可以从第二个数组中换的数字个数,先排序挨个从第二个数组中取最大的换第一个数组中最小的数字即可。
#include<iostream>
#include<algorithm>
#include<list>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int a[35], b[35];
int main()
{
int T;
cin >> T;
while (T--)
{
int n, k;
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i < n; i++)
cin >> b[i];
sort(a, a + n);
sort(b, b + n);
int j = n - 1;
int sum = 0;
for (int i = 0; i < n; i++)
{
if (sum == k)
break;
if (a[i] < b[j])
{
a[i] = b[j];
j--;
sum++;
}
}
int ans = 0;
for (int i = 0; i < n; i++)
{
ans += a[i];
}
cout << ans << endl;
}
}
总结:
多做题有所收获了,rnak曲线开始平稳了。