数据结构 跑跑卡丁车
来源:互联网 发布:景安网络手机版 编辑:程序博客网 时间:2024/04/28 15:16
数据结构与算法实验题 7.2 跑跑卡丁车
★实验任务
有 n 辆卡丁车车牌号分别为 1,2,…,n 在高速公路上竞速。Coffee 是位跑跑卡丁车爱
好者,她在比赛的过程中拍摄了两张照片,在照片上可以清晰的看到每辆车的的车牌号。
给出两张照片上从第一名到最后一名的车牌号,请你编程计算这两张照片的拍摄时间段内
至少发生了几次超车。
★数据输入
输入第一行包括一个正整数 n(1<=n<=50000),表示卡丁车数量。接下来两行,每行
包括 n 个整数,表示照片上从第一名到最后一名的车牌号(1 到 n 的全排列),每两个数之
间用一个空格隔开。
★数据输出
输出仅有一个数,即至少发生的超车次数,答案在 int 型范围内。
输入示例 输出示例
4 5
2 3 4 1
4 1 3 2
很简单,归并最直接,当然也可以用二叉树,线段树来实现,主要就是计算逆序对数,因此要先规定一个其中一个数组为标准排列即1。。。n
代码
#include<stdio.h>
int a[50002]={0},b[50002]={0},step=0;
void mst(int *k,int *kl,int first,int last){
if (first<last){
int mid=(first+last)/2;
mst(kl,k,first,mid);
mst(kl,k,mid+1,last);
last++;
int s=first,t=++mid,i,j=first;
while (s<mid&&t<last)
{
if (k[s]<=k[t])
kl[j++]=k[s++];
else {
kl[j++]=k[t++];
step+=mid-s;
}
}
while(s<mid)
kl[j++]=k[s++];
while(t<last)
kl[j++]=k[t++];
}
}
main(){
int i,j,n;
scanf("%d",&n);
n++;
for(i=1;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++){
scanf("%d",&j);
b[j]=i;
}
for(i=1;i<n;i++)
a[i]=b[a[i]];
for(i=1;i<n;i++)
b[i]=a[i];
mst(a,b,1,n-1);
printf("%d/n",step);
}
- 数据结构 跑跑卡丁车
- 跑跑卡丁车
- 跑跑卡丁车
- 跑跑卡丁车,FT!
- FOJ 1685 跑跑卡丁车
- FZU 1685 跑跑卡丁车
- hdu 1494 跑跑卡丁车
- hdu 1494 跑跑卡丁车~
- 跑跑卡丁车 hdu
- hdu 1494 跑跑卡丁车
- Hdu 1494 跑跑卡丁车
- 跑跑卡丁车 HUD
- HDU 1494跑跑卡丁车
- hdu1494 跑跑卡丁车dp
- HDU-1494-跑跑卡丁车
- HDU 1494 跑跑卡丁车
- 跑跑卡丁车解题报告
- 动态规划-跑跑卡丁车
- 体验哈
- inotify的应用
- Exception in thread "TimerTotal_3" java.lang.OutOfMemoryError: Java heap space
- user.hbm.xml
- dos命令列出文件列表
- 数据结构 跑跑卡丁车
- ISAPI_Rewrite 2.13全功能版
- 本地方法取得Java属性/调用java方法
- 本地方法处理java数组/引用问题/缓存jfieldID/jmethodID
- 如何读懂人民币升值?
- 如何集成Windows login, forms集成验证?
- Dev Guide_01_AIDL/IPC机制
- 基于V4L2的视频驱动开发
- ZTOOL