勿语静候 发表于 2014-10-8 21:58:38

poj2299自己运行正确,提交却是wrong answer,希望好心人帮忙找一下原因。万分感谢

本帖最后由 勿语静候 于 2014-10-8 22:04 编辑

题目大意:给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列。

Input59 1 0 5 4
31 2 3
Output
6
0</blockquote></div></div><p></p><div><div class="blockcode"><blockquote>#include<iostream>
using namespace std;
#define MAXSIZE 500000

long long t;
void merging(int* listL , int listL_size , int* listR , int listR_size)
{
      int i , j , k;
      i = j = k =0;
      int temp;
      
      while( i < listL_size && j < listR_size)
      {
                if( listL > listR)
                {
                        temp = listR;
                        t+=listL_size - i;
                }
                else
                {
                        temp = listL;
                }
      }
      
      while(i < listL_size)
      {
                temp = listL;
      }
      while(j < listR_size)
      {
                temp = listR;
      }
      
      for(int m = 0; m < (listL_size + listR_size);m++)
      {
                listL = temp;
      }
}

void mergeSort(int* k , int n)
{
      if(n > 1)
      {
                int *listL = k;
                int listL_size = n / 2;
                int *listR = k + n / 2;
                int listR_size = n - listL_size;
               
                mergeSort(listL , listL_size);
                mergeSort(listR , listR_size);
               
                merging(listL , listL_size , listR, listR_size);
      }
}

int main()
{
      int n;
      while(cin >> n)
      {
                t = 0;
                int* a = new int;
               
                for(int i = 0 ; i < n ; i++)
                {
                        cin >> a;
                }
               
                mergeSort(a,n);
               
                cout << t << endl;
               
                delete a;
      }

      return 0;
}











大个的糖果 发表于 2014-11-1 04:43:52

页: [1]
查看完整版本: poj2299自己运行正确,提交却是wrong answer,希望好心人帮忙找一下原因。万分感谢