竹園論壇

標題: [TOJ] 11-bubble , WA求解 [打印本頁]

作者: jd3    時間: 2014-5-12 22:38
標題: [TOJ] 11-bubble , WA求解
本帖最後由 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;
  • }

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

    作者: Sylveon    時間: 2014-5-12 22:57
    ans請開long long。我選正解
    作者: 零人桐    時間: 2014-9-27 22:35
    已加 long long
    但沒效
    作者: 零人桐    時間: 2014-9-27 22:37
    ans請開long long。我選正解

    但我加了
    作者: 零人桐    時間: 2014-9-27 22:39
    [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));
        }
    }

    long long find(long long i)
    {
        long long sum = 0;
        while(i > 0)
        {
            sum += BIT;
            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);

        for(long long i = n-1 ; i >= 0 ; i--)
        {
            ans += find(list-1);
            add(list);
        }

        printf("%d\n",ans);

        return 0;
    }

    都開了
    [at]難道有問題嗎??[/at]
    作者: 零人桐    時間: 2014-9-27 22:39
    [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));
        }
    }

    long long find(long long i)
    {
        long long sum = 0;
        while(i > 0)
        {
            sum += BIT;
            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);

        for(long long i = n-1 ; i >= 0 ; i--)
        {
            ans += find(list-1);
            add(list);
        }

        printf("%d\n",ans);

        return 0;
    }

    作者: Sylveon    時間: 2014-9-27 23:17
    因為用scanf/printf讀long long 要用 %lld ,你沒有改




    歡迎光臨 竹園論壇 (http://forum.tfcis.org/) Powered by Discuz! X3.2