查看: 537|回復: 7

[解決] TOJ 119 / B. Brainwash

[複製鏈接]
  • TA的每日心情
    奮鬥
    2014-12-7 00:02
  • 簽到天數: 20 天

    [LV.4]偶爾看看III

    5

    主題

    32

    帖子

    139

    積分

    高一新生

    Rank: 2

    積分
    139

    台南一中資訊社

    發表於 2014-12-5 20:11:36 | 顯示全部樓層 |閱讀模式

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

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

    x
    本帖最後由 JasonTsai@FB 於 2014-12-7 00:26 編輯

    測試時都正常,但上傳後一直WA,不知道哪裡有bug,請各位幫忙抓,謝謝。
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<utility>
    using namespace std;
    int main()
    {
        int N, T, a, b;
        bool quit = false;
        cin >> N;
        int data[N];
        for (int i = 0; i < N; i++)
            cin >> data[i];
        cin >> T;
        for (int i = 0; i < T; i++)
        {
            cin >> a >> b;
            if (quit == false)
            {
                     if (b - a > 7)
                        quit = true;
                     else
                         swap (data[a - 1], data[b - 1]);
            }
        }
        if (quit == true)
        {
                 cout << "I QUIT!\n";
                 for (int i = 0; i < N - 1; i++)
                     cout << data[i] << ' ';
                 cout << data[N - 1] << '\n';
        }
        else
        {
            cout << "SORTED!\n";
            for (int i = 0; i < N - 1; i++)
                cout << data[i] << ' ';
            cout << data[N - 1] << '\n';
        }
        return 0;
    }

    回復

    使用道具 檢舉

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

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

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

    發表於 2014-12-6 22:12:40 | 顯示全部樓層

    回帖獎勵 +10

    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<algorithm> //背這一個比較通用,反正也是要背 
    //#include<utility>
    using namespace std;
    
    //陣列要宣告成常數大小,過大的陣列要放在全域變數 
    int data[200000];
    
    int main()
    {
        int N, T, a, b;
        bool quit = false;
        cin >> N;
        
        //不要這樣寫,這不符合現在C++的規範,如果N太大會RE給你看 
        //int data[N];
        
        //可以 從1開始放 更符合題目敘述 
        for (int i = 1; i <= N; i++)
            cin >> data[i];
        cin >> T;
        //for (int i = 0; i < T; i++)
        while(T--) // Advance
        {
            cin >> a >> b;
            if (quit == false)
            {
            	//中間夾7個檔案是相減大於7嗎? 
    			//AXXXXXXXB
    			//有人規定a<b嗎? 
    			if (b - a > 7) //WA 仔細思考 
    			{ 
    				quit = true;
    				break; //失敗直接離開while迴圈 
    			} 
    			else
    				swap (data[a], data[b]);
            }
        }
        if (quit == true)
        {
             cout << "I QUIT!\n";
    	}
        else
        {
            cout << "SORTED!\n";
        }
        for (int i = 1; i < N ; i++)
    		cout << data[i] << ' ';
    	cout << data[N] << '\n';
        return 0;
    }
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    奮鬥
    2014-12-7 00:02
  • 簽到天數: 20 天

    [LV.4]偶爾看看III

    5

    主題

    32

    帖子

    139

    積分

    高一新生

    Rank: 2

    積分
    139

    台南一中資訊社

     樓主| 發表於 2014-12-6 23:05:07 | 顯示全部樓層
    在某一次submit的時候,我有把
    [C++] 純文本查看 復制代碼
    if (b - a > 7)

    改成
    [C++] 純文本查看 復制代碼
    if (b - a > 7 || a - b > 7)

    不過還是WA

    至於
    [C++] 純文本查看 復制代碼
    while(T--)

    的部分我再慢慢研究
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    奮鬥
    2014-12-7 00:02
  • 簽到天數: 20 天

    [LV.4]偶爾看看III

    5

    主題

    32

    帖子

    139

    積分

    高一新生

    Rank: 2

    積分
    139

    台南一中資訊社

     樓主| 發表於 2014-12-7 00:00:32 | 顯示全部樓層
    已經改成這樣,不過還是WA
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<utility>
    using namespace std;
    int main()
    {
        int N, T, a, b, data[200000];
        cin >> N;
        for (int i = 0; i < N; i++)
            cin >> data[i];
        cin >> T;
        while(T--)
        {
            cin >> a >> b;
            if (b - a > 7 || a - b > 7)
                goto quit;
            else
                swap (data[a - 1], data[b - 1]);
        }
        cout << "SORTED!\n";
        for (int i = 0; i < N - 1; i++)
            cout << data[i] << ' ';
        cout << data[N - 1] << '\n';
        return 0;
        quit:
        cout << "I QUIT!\n";
        for (int i = 0; i < N - 1; i++)
            cout << data[i] << ' ';
        cout << data[N - 1] << '\n';
        return 0;
    }
    
    回復 支持 反對

    使用道具 檢舉

  • TA的每日心情
    鬱悶
    2015-5-15 22:38
  • 簽到天數: 33 天

    [LV.5]常住居民I

    75

    主題

    302

    帖子

    766

    積分

    版主

    TFcis - 105 附設監工官

    Rank: 7Rank: 7Rank: 7

    積分
    766

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

    發表於 2014-12-7 00:09:06 | 顯示全部樓層
    間隔超過7個表示要>8~~~

    點評

    我覺得你的敘述很像怪怪的,不過改成>8之後就AC了  發表於 2014-12-7 00:23
    <這是個人簽名欄位>
    回復 支持 反對

    使用道具 檢舉

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

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

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

    發表於 2014-12-7 14:15:09 來自手機 | 顯示全部樓層
    不要用goto 參考我程式的寫法

    點評

    為什麼真的會有學弟在用goto啊...  發表於 2014-12-7 16:07
    回復 支持 反對

    使用道具 檢舉

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

    本版積分規則

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