题解CF53D
update 2022.8.6:发现有错误,改一下。
题目传送门(CF53D)
这一题,有两个数组,分别是
然后我们看一下
于是考虑
思路部分
首先,这一题是要求换数组
题目是这么写的——
不需要最小化移动次数。
那么,我们可以利用冒泡排序的性质,去得到答案。
冒泡排序的思路是:
比较
第一轮比较结束之后,最大的数就到最后面的
经过
我们对冒泡进行改动,即可
当我们把一个数移到另一个位置时,
记录下来之后,因为本题不求最优解,所以一点问题没有。
而且冒泡只交换连续的两个数字,所以不会违反题意。
代码实现
读入部分就不说了。
如果,
交换的过程用第三层循环
记得
然后定义
最后,对于每个
AC Code:
#include<iostream>
using namespace std;
int a[301],b[301],ans[1000001],p,n;//定义数组和变量(不会MLE)
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
if(b[j]==a[i]){
for(int k=j;k>i;k--){
swap(b[k],b[k-1]);//冒泡排序思路交换
ans[++p]=k;//记录ans
}
break;//一定记得break
}
}
}
cout<<p<<endl;//输出总数
for(int i=1;i<=p;i++){
cout<<ans[i]-1<<' '<<ans[i]<<endl;
}
return 0;
}
时间复杂度约为
后记:萌新第一次写题解,如果有错,请大佬帮忙指出!谢谢啦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】