查看: 874|回復: 8

[解決] [TOJ] 11-bubble , WA求解

[複製鏈接]
  • TA的每日心情
    鬱悶
    2015-5-15 22:38
  • 簽到天數: 33 天

    [LV.5]常住居民I

    75

    主題

    302

    帖子

    766

    積分

    版主

    TFcis - 105 附設監工官

    Rank: 7Rank: 7Rank: 7

    積分
    766

    台南一中資訊社程式設計達人 - 2014

    發表於 2014-5-12 22:38:06 | 顯示全部樓層 |閱讀模式

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

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

    x
    本帖最後由 jd3 於 2014-5-17 23:10 編輯


    完全WA求解~~

    #include<iostream>
  • #include<cstdio>
  • #include<cstring>


  • using namespace std;

  • int n;
  • int list[2000010];
  • int BIT[2000010];


  • void add(int i)
  • {
  •     while(i <= n)
  •     {
  •         BIT[i]++;
  •         i += (i&(-i));
  •     }
  • }

  • int find(int i)
  • {
  •     int sum = 0;
  •     while(i > 0)
  •     {
  •         sum += BIT[i];
  •         i -= (i&(-i));
  •     }
  •     return sum;
  • }


  • int main()
  • {
  •     int ans = 0;
  •    
  •     memset(BIT,0,sizeof(BIT));
  •    
  •     scanf("%d",&n);
  •     for(int i = 0 ; i < n ; i++)
  •         scanf("%d",&list[i]);
  •    
  •     for(int i = n-1 ; i >= 0 ; i--)
  •     {
  •         ans += find(list[i]-1);
  •         add(list[i]);
  •     }
  •    
  •     printf("%d\n",ans);
  •    
  •     return 0;
  • }

  • 已試過有無換行及多筆測資輸入
    應該是一下就爆炸了

    點評

    AC後屬性框記得改  發表於 2014-5-14 22:57
    <這是個人簽名欄位>
    回復

    使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    發表於 2014-5-12 22:57:21 | 顯示全部樓層
    ans請開long long。我選正解

    點評

    jd3
    感謝正解~  發表於 2014-5-12 23:33
    回復 支持 1 反對 0

    使用道具 檢舉

  • TA的每日心情
    開心
    2015-7-8 22:33
  • 簽到天數: 26 天

    [LV.4]偶爾看看III

    27

    主題

    141

    帖子

    397

    積分

    好好學生

    Rank: 3Rank: 3

    積分
    397

    程式設計達人 - 2014新手達陣

    發表於 2014-9-27 22:35:16 | 顯示全部樓層
    已加 long long
    但沒效
    零人桐
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2015-7-8 22:33
  • 簽到天數: 26 天

    [LV.4]偶爾看看III

    27

    主題

    141

    帖子

    397

    積分

    好好學生

    Rank: 3Rank: 3

    積分
    397

    程式設計達人 - 2014新手達陣

    發表於 2014-9-27 22:37:59 | 顯示全部樓層
    ans請開long long。我選正解

    但我加了
    零人桐
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2015-7-8 22:33
  • 簽到天數: 26 天

    [LV.4]偶爾看看III

    27

    主題

    141

    帖子

    397

    積分

    好好學生

    Rank: 3Rank: 3

    積分
    397

    程式設計達人 - 2014新手達陣

    發表於 2014-9-27 22:39:09 | 顯示全部樓層
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    
    using namespace std;
    
    long long n,list[2000010],BIT[2000010];
    
    
    void add(long long i)
    {
        while(i <= n)
        {
            BIT[i]++;
            i += (i&(-i));
        }
    }
    
    long long find(long long i)
    {
        long long sum = 0;
        while(i > 0)
        {
            sum += BIT[i];
            i -= (i&(-i));
        }
        return sum;
    }
    
    
    int main()
    {
        long long ans = 0;
    
        memset(BIT,0,sizeof(BIT));
    
        scanf("%d",&n);
        for(long long i = 0 ; i < n ; i++)
            scanf("%d",&list[i]);
    
        for(long long i = n-1 ; i >= 0 ; i--)
        {
            ans += find(list[i]-1);
            add(list[i]);
        }
    
        printf("%d\n",ans);
    
        return 0;
    }

    都開了
    [at]難道有問題嗎??[/at]
    零人桐
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    開心
    2015-7-8 22:33
  • 簽到天數: 26 天

    [LV.4]偶爾看看III

    27

    主題

    141

    帖子

    397

    積分

    好好學生

    Rank: 3Rank: 3

    積分
    397

    程式設計達人 - 2014新手達陣

    發表於 2014-9-27 22:39:28 | 顯示全部樓層
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    
    using namespace std;
    
    long long n,list[2000010],BIT[2000010];
    
    
    void add(long long i)
    {
        while(i <= n)
        {
            BIT[i]++;
            i += (i&(-i));
        }
    }
    
    long long find(long long i)
    {
        long long sum = 0;
        while(i > 0)
        {
            sum += BIT[i];
            i -= (i&(-i));
        }
        return sum;
    }
    
    
    int main()
    {
        long long ans = 0;
    
        memset(BIT,0,sizeof(BIT));
    
        scanf("%d",&n);
        for(long long i = 0 ; i < n ; i++)
            scanf("%d",&list[i]);
    
        for(long long i = n-1 ; i >= 0 ; i--)
        {
            ans += find(list[i]-1);
            add(list[i]);
        }
    
        printf("%d\n",ans);
    
        return 0;
    }
    零人桐
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    發表於 2014-9-27 23:17:49 | 顯示全部樓層
    因為用scanf/printf讀long long 要用 %lld ,你沒有改
    回復 支持 反對

    使用道具 檢舉

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

    本版積分規則

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