站外题求助
  • 板块学术版
  • 楼主NightStriker
  • 当前回复13
  • 已保存回复13
  • 发布时间2022/11/5 20:34
  • 上次更新2023/10/27 04:09:22
查看原帖
站外题求助
714084
NightStriker楼主2022/11/5 20:34

刚刚过去的模拟赛T4。(不是按难度排的)


Bxgz刚刚给弟子们讲完了选择法排序,插入法排序,还有冒泡法排序。 弟子们最喜欢的算法是“冒泡排序”。下面是弟子们写的冒泡排序伪代码。

sorted = false;
int num=0;
for(;sorted==false;)
{
   sorted = true
   num++;
   for (i = 1 ;i<= N-1;i++)
      if( A[i+1] < A[i])
       {
         交换 A[i]和 A[i+1]
         sorted = false
       }

}
cout<<num;

给定一个需要排序的数列,请确定上面的代码执行结束后,num的输出值是多少。

n105n \le 10^5


然后这不就是个模拟吗,把伪代码改改就行了。

5min码完,发现排名(教练在群里发的,因为是OI赛制我们看不见)没有满分的,不是50pts就是10pts,感觉有点端倪。

O(n2)\mathcal{O}(n^2) 的复杂度应该可以过 10510^5 吧 /fad

#include<bits/stdc++.h>
using namespace std;
int n,ans;
int a[100001];
bool flag;
int main(){
	cin>>n;
	for(int i = 1;i<=n;i++){
		cin>>a[i];
	}
	for(;!flag;){
		flag=1;
		ans++;
		for(int i = 1;i<=n-1;i++){
			if(a[i+1]<a[i]){
				int t = a[i];
				a[i] = a[i+1];
				a[i+1] = t;
				flag=0;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}
2022/11/5 20:34
加载中...