查看: 1268|回復: 1
打印 上一主題 下一主題

[解決] [TOJ] 11- bubble, WA 求解,使用 Merge Sort

[複製鏈接]
  • TA的每日心情
    鬱悶
    2015-2-10 21:23
  • 簽到天數: 1 天

    [LV.1]初來乍到

    12

    主題

    69

    帖子

    779

    積分

    高級會員

    Rank: 4

    積分
    779

    台南一中資訊社

    跳轉到指定樓層
    樓主
    發表於 2014-5-16 19:38:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    本帖最後由 amoshuangyc 於 2014-5-17 18:39 編輯

    http://toj.twbbs.org/oj/chal/1863/

    使用 Merge Sort (遞迴)可能會 TLE 沒錯,但我第一筆測資就 WA,可是我找不到程式哪裡錯了。

    #include <iostream>

  • using namespace std;

  • int data[2000000+1];
  • int temp[2000000+1];

  • long long merge(int p, int m, int q)
  • {
  •         int idx_L = p;
  •         int idx_R = m + 1;
  •         int idx_temp = p;
  •         
  •         long long cnt = 0;
  •         
  •         while (idx_L <= m && idx_R <= q) {
  •                 if (data[idx_L] < data[idx_R]) {
  •                         temp[idx_temp++] = data[idx_L++];
  •                 }
  •                 else {
  •                         temp[idx_temp++] = data[idx_R++];
  •                         cnt += (m - idx_L + 1);
  •                 }
  •         }
  •         
  •         while (idx_L <= m)
  •                 temp[idx_temp++] = data[idx_L++];
  •         
  •         while (idx_R <= q)
  •                 temp[idx_temp++] = data[idx_R++];
  •                
  •         for (int i=p; i<=q; i++)
  •                 data[i] = temp[i];
  •         
  •         return cnt;
  • }

  • long long merge_sort(const int p, const int q)
  • {
  •         if (p >= q) return 0;
  •         
  •         int m = (p+q) / 2;
  •         long long cnt_L = merge_sort(p, m);
  •         long long cnt_R = merge_sort(m+1, q);
  •         long long cnt_M = merge(p, m, q);
  •         
  •         return (cnt_L + cnt_R + cnt_M);
  • }

  • int main()
  • {
  •         int N;
  •         cin >> N;
  •         
  •         for (int i=0; i<N; i++)
  •                 cin >> data[i];
  •         
  •         long long cnt = merge_sort(0, N-1);
  •         
  •         cout << cnt << endl;
  •         
  •         return 0;
  • }



  • 點評

    已解決,我沒有考慮到陣例有重覆元素的情況,所以程式的 data[idx_L] < data[idx_R] 改成 <= ,程式就正確了。  發表於 2014-5-17 18:39
    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表