A. Brick Wall
题意:砖块是大小为1*n的长方体,可以水平或者竖直放置,(k >= 2),现给你n组数据,每组数据包含一个举行墙体的n和m,让你求这个墙的墙体稳定性(水平砖头与竖直砖头的差值,正数)
题解:这个题是一个贪心思想,要想总体的差值最大,我只要全部放水平(竖直)的1*2砖块就行,这样得到的墙体稳定性就是最大的
代码实现:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
void solve()
{
long long a, b;
cin >> a >> b;
cout << (b / 2) * a << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
return 0;
}
B. Minimize Inversions
题意:给出两组数据,两组数据是绑定的,假如第一组a1和a3交换,那么第二组b1和b3也交换,求出两组数据交换后逆序对最少得情况输出
题解:通过样例可以注意到,当其中一个数组有序时,它的总逆序对最少, 可以在读入第二个数组的时候,直接假设第一个数组有序的情况存进去,输出时第一个数组有序,第二个数组原样输出
代码实现:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5;
int a[1000005];
int b[1000005];
void solve()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 1; i <= n; i++)
cin >> b[a[i]];
for(int i = 1; i <= n; i++)
cout << i <<" ";
cout << endl;
for(int i = 1; i <= n; i++)
cout << b[i] <<" ";
cout << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while(t--)
solve();
return 0;
}