Συζυγiα [Stage 5] 一个问题
  • 板块学术版
  • 楼主一SakuRa
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/8/8 20:02
  • 上次更新2023/11/4 11:30:17
查看原帖
Συζυγiα [Stage 5] 一个问题
419519
一SakuRa楼主2021/8/8 20:02

有nn个同学排成一排。

h_1, h_2, h_3, ..., h_n 代表这些同学的高度,两两不同。

每次 Lecoww 可以选择两个相邻的同学,将他们两人的位置交换,这样的交换可以进行无数次(确信。

你的任务是帮助 Lecoww 用最少次数的交换,使这些同学的身高从左到右的高度递增。

Input 共两行

第一行一个数nn 第二行nn个数h_1, h_2, h_3, ..., h_n,代表这些同学的高度

Output

一个数,表示最少的交换次数。

Sample Input 1

5 3 5 4 1 2

Sample Output 1

5

Hint

对于样例:

第1次,交换第4和第5个同学,排序后为3,5,4,2,1

第2次,交换第3和第4个同学,排序后为3,5,2,4,1

第3次,交换第1和第2个同学,排序后为5,3,2,4,1

第4次,交换第2和第3个同学,排序后为5,2,3,4,1

第5次,交换第1和第5个同学,排序后为1,2,3,4,5

可以证明,没有方法比这更少。

对于100%100的数据,满足

1 <= n <= 3 x 10^5

1 <= h_i <= n

保证h_i 互不相同。

评分标准:

第 1 - 8个点 : 共8分,n <= 4 第 9 - 16个点 : 共8分,n <= 8

第 17 - 20个点 : 共16分,n <= 100

第 21 - 24个点 : 共8分,n <= 300

第 25 - 28个点 : 共8分,n <= 700

第 29 - 32个点 : 共8分,n <= 2000

第 33 - 36个点 : 共8分,n <= 6000

第 37 - 40个点 : 共16分,n <= 60000

第 41 - 45个点 : 共25分,n <= 300000

我的想法是模拟冒泡:但只得了42分

我的代码:

#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize(2)
using namespace std;
#define ll long long
ll b1,b2,ma,mi=1000000,ans=0,ans1=0;
ll n,a[300001]={0},b[300001],last1,last2,sot,sot2;
bool bj,bjj;
inline void f1(){
	for(int i=1;i<=n;i++){
		if(b[i]<mi){
			mi=b[i];
			b2=i;
		}
	}
}
inline void f2(){
	for(int i=1;i<=n;i++){
		if(b[i]>ma){
			ma=b[i];
			b1=i;
		}
	}
}
int main(){
	std::ios::sync_with_stdio(false);
	cin>>n;
	sot=n;
	sot2=n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	for(int i=n;i>=1;i--){
		for(int j=2;j<=sot;j++){
			if(a[j-1]>a[j]){
				bj=1;
				swap(a[j-1],a[j]);
				last1=j;
				ans++;
			}
		}
		sot=last1;
		if(bj==0)
			break;
	}
	f1();
	f2();
	if(n-b1>=b2-1){
		swap(b[n],b[b1]);
		ans1++;
	}
	else{
		swap(b[1],b[b2]);
		ans1++;
	}
	for(int i=n;i>=1;i--){
		for(int j=2;j<=sot2;j++){
			if(b[j-1]>b[j]){
				bjj=1;
				swap(b[j-1],b[j]);
				ans1++;
				last2=j;
			}
		}
		sot=last2;
		if(bjj==0)
			break;
	}
	if(ans1<=ans)
		cout<<ans1;
	else
		cout<<ans;
	return 0;
}

我太弱了

求大佬指点

2021/8/8 20:02
加载中...