竹園論壇

標題: TOJ 119 / B. Brainwash [打印本頁]

作者: JasonTsai@FB    時間: 2014-12-5 20:11
標題: TOJ 119 / B. Brainwash
本帖最後由 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;
    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 << ' ';
             cout << data[N - 1] << '\n';
    }
    else
    {
        cout << "SORTED!\n";
        for (int i = 0; i < N - 1; i++)
            cout << data << ' ';
        cout << data[N - 1] << '\n';
    }
    return 0;
}


作者: Sylveon    時間: 2014-12-6 22:12
[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;
    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);
        }
    }
    if (quit == true)
    {
         cout << "I QUIT!\n";
        }
    else
    {
        cout << "SORTED!\n";
    }
    for (int i = 1; i < N ; i++)
                cout << data << ' ';
        cout << data[N] << '\n';
    return 0;
}

作者: JasonTsai@FB    時間: 2014-12-6 23:05
在某一次submit的時候,我有把
[C++] 純文本查看 復制代碼
if (b - a > 7)

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

不過還是WA

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

的部分我再慢慢研究
作者: JasonTsai@FB    時間: 2014-12-7 00:00
已經改成這樣,不過還是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;
    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 << ' ';
    cout << data[N - 1] << '\n';
    return 0;
    quit:
    cout << "I QUIT!\n";
    for (int i = 0; i < N - 1; i++)
        cout << data << ' ';
    cout << data[N - 1] << '\n';
    return 0;
}

作者: jd3    時間: 2014-12-7 00:09
間隔超過7個表示要>8~~~
作者: Sylveon    時間: 2014-12-7 14:15
不要用goto 參考我程式的寫法




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