6. 永远不会成功的事情

题目描述

小刚雄心勃勃,打算尝试一件似乎永远不会成功的事情:他想给他的整个兔群拍张照片。 为了让照片看起来好看,他想让兔子从矮到高排成一排。不幸的是,就在他让兔子排成一排之后,兔子贝西,总是会制造麻烦,走出了队伍,重新插入到队列的其他位置!

小刚想要交换成对的兔,这样整个兔群就能重新排好队。请帮助他确定为了实现这一目标,他需要在兔子对之间进行的最小交换次数是多少。

输入格式

输入的第一行包含

)N(2≤N≤100). 接下来

N行描述了贝西移动后兔子排成一排时的高度。每只兔子的高度都是

1…1,000,000范围内的整数.兔可能有相同的身高。

输出格式

请输出小刚需要交换兔子对的最小次数,以实现正确的排序。交换不一定需要在排序中涉及相邻的兔子。

样例输入
6
2
4
7
7
9
3
样例输出
3
注意

在这个例子中,贝西显然是身高3的兔子。小刚使用如下所述的三次交换将兔子返回排序顺序:

2 4 7 7 9 3 -原始阵容

2、4、7、7、3、9——交换最后两只兔子

2 4 3 7 7 9 -交换第一个7和3

2 3 4 7 7 9 -交换4和3

#include <bits/stdc++.h>
#define maxn 2000000
 using namespace std;
    bool flag;
    int num,basy,county,h[110],l[110];
 int main(){
 	cin>>num;
 	h[0] = 0;//虚拟 
 	cin>>h[1];
 	l[1] = h[1];
 	int i = 2;
 	while(i<=num){
 		cin>>h[i];
 		
 		if(h[i] == h[i-1]) l[i] = 0;
 		else l[i] = h[i]; //线搜 
 		
 		i++;
	 }
	h[num+1] = maxn; 
	for(i = 1;i<=num;i++){
		if(h[i]<h[i-1]&&h[i-1]<=h[i+1]){
			basy = i;
			flag = true;//判为basy后移 
			break;
		}
		if(h[i]>h[i+1]&&h[i-1]<=h[i+1]){
			basy = i;
			flag = false;//判为basy前移 
			break;
		}
	} 
	if(flag) 
    for(i = 1;i<=basy;i++){
    	if(l[i] == 0)continue;
    	else if(l[i]>h[basy]) county++; 
	}
	else
    for(i = num;i>=basy;i--){
    	if(l[i] == 0)continue;
    	else if(l[i]<h[basy]) county++; 
	}
	cout<<county;
	return 0;	 
 }

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值