gpt4 book ai didi

c++ - 计算数组中的反转次数

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:57 25 4
gpt4 key购买 nike

对于给定的问题陈述,我们需要计算数组中的反转次数,因此我尝试应用一种使用合并排序的算法,并在合并和排序时计算反转次数。虽然我的代码为我提供给系统的测试用例给出了与我自己的解决方案相同的答案,但我在在线法官 - Codechef 上得到了错误的答案。请告诉我我的错误。

问题链接:http://www.codechef.com/COOK43/problems/LPAIR

代码:

#include<iostream>
using namespace std;

long long int Merge(int* left,int* right,int* arr,int nl,int nr)
{
int i=0;
int j=0;
int k=0;
long long int cnt=0;
while(i<nl&&j<nr)
{
if(left[i]<=right[j])
{
arr[k]=left[i];
i++;
}
else
{
arr[k]=right[j];
j++;
cnt+=nl-i;
}
k++;
}
while(i<nl)
{
arr[k]=left[i];
i++;
k++;
}
while(j<nr)
{
arr[k]=right[j];
j++;
k++;
}
return cnt;
}

long long int MergeSort(int *a,int len)
{
long long int cnt=0;
if(len<2)
return 0;
int mid=len/2;
int* left=new int[mid];
int* right=new int[len-mid];
for(int i=0;i<mid;i++)
left[i]=a[i];
for(int i=mid;i<len;i++)
right[i-mid]=a[i];
cnt+=MergeSort(left,mid);
cnt+=MergeSort(right,len-mid);
cnt+=Merge(left,right,a,mid,len-mid);
delete(left);
delete(right);
return cnt;
}

int main()
{
int n;
cin>>n;
int* fm=new int[n];
for(int i=0;i<n;i++)
cin>>fm[i]>>fm[i];
cout<<MergeSort(fm,n);
}

最佳答案

这是正确的方法,你有一个非常简单的问题 - n = 105 的反转次数可能会溢出整数。想一想如何解决这个问题。

关于c++ - 计算数组中的反转次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21933717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com