Codeforces Round 922 (Div. 2)A、B

文章讲述了如何使用贪心算法解决两个问题:一是计算给定墙体中水平和竖直砖块布局导致的最大稳定性差异;二是通过优化交换操作减少两组绑定数据的逆序对。代码展示了具体实现方法。
摘要由CSDN通过智能技术生成

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;
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值