Ошибка компиляции и ошибка времени выполнения в UVa 12657 с использованием C++ и JAVA

Я отправляю мой код на vjudge здесь. После того, как я проверю свой код на всех тестовых примерах в uDebug, я считаю, что мой код правильный. Но когда я отправляю его с помощью C++, появляется ошибка компиляции без отладочной информации. Как ниже.

Ошибка компиляции с использованием C++

После многократных попыток я получаю только ошибку компиляции. Поэтому я пишу свой код C++ на JAVA, а также проверяю его правильность на uDebug. Затем я отправляю свой код и получаю ошибку времени выполнения, как показано ниже.

Ошибка выполнения при использовании JAVA

Компилятор, который я использую в vjudge, выше двух картинок. И мои варианты компилятора - ISO C++ 11 5.11 на Dev-C++ и jdk1.8.0_91 на Eclipse Jee Neon1.

Вот мой код

C++

#include <iostream>

using namespace std;

#define MAX 100010
int myLeft[MAX], myRight[MAX];

void link(int L, int R)
{
    myRight[L] = R;
    myLeft[R] = L;
}

int main()
{
    int test_case = 1;
    while(!cin.eof())
    {
        int box_num = 0, command_num = 0;
        cin >> box_num >> command_num;
        if(box_num == 0)
            break;
        for(int i = 1; i <= box_num; i ++)
        {
            myLeft[i] = i - 1;
            myRight[i] = i + 1;
        } 
        myLeft[0] = 0;
        myRight[0] = 1;
        bool is_inv = false;
        for(int i = 1; i <= command_num; i ++)
        {
            int op, X, Y;
            cin >> op;
            if(op == 4)
            {
                is_inv = !is_inv;
                continue;
            }
            cin >> X >> Y;
            if(is_inv && op != 3)
                op = 3 - op;
            if(op == 1)
            {
                if(myLeft[Y] == X)
                    continue;
                link(myLeft[X], myRight[X]);
                link(myLeft[Y], X);
                link(X, Y);
            }
            else if(op == 2)
            {
                if(myRight[Y] == X)
                    continue;
                link(myLeft[X], myRight[X]);
                link(X, myRight[Y]);
                link(Y, X);
            }
            else if(op == 3)
            {
                if(myLeft[Y] == X)
                {
                    link(myLeft[X], myRight[X]);
                    link(X, myRight[Y]);
                    link(Y, X);
                }
                else if(myLeft[X] == Y)
                {
                    link(myLeft[Y], myRight[Y]);
                    link(Y, myRight[X]);
                    link(X, Y);
                }
                else
                {
                    link(myLeft[X], myRight[X]);
                    link(myLeft[Y], myRight[Y]);
                    int YL = myLeft[Y];
                    int YR = myRight[Y];
                    link(myLeft[X], Y);
                    link(Y, myRight[X]);
                    link(YL, X);
                    link(X, YR);
                }
            }
        }
        int b = 0;
        long long result = 0;
        for(int i = 1; i <= box_num; i ++)
        {
            b = myRight[b];
            if(i % 2 == 1)
                result += b;
        }
        if(is_inv && box_num % 2 == 0)
            result = (long long)box_num*(box_num+1)/2 - result;
        cout << "Case " << test_case++ << ": " << result << "\n";
    }
    return 0;
}

ДЖАВА

    import java.util.Scanner;

public class Main {

    static int myLeft[] = new int[100010]; 
    static int myRight[] = new int[100010];

    public static void link(int L, int R)
    {
        myRight[L] = R;
        myLeft[R] = L;
    }
    public static void main(String[] args)
    {
        int test_case = 1;
        Scanner cin = new Scanner(System.in);
        while(cin.hasNextInt())
        {
            int box_num = 0, command_num = 0;
            box_num = cin.nextInt();
            command_num = cin.nextInt();
            for(int i = 1; i <= box_num; i ++)
            {
                myLeft[i] = i - 1;
                myRight[i] = i + 1;
            } 
            myLeft[0] = 0;
            myRight[0] = 1;
            boolean is_inv = false;
            for(int i = 1; i <= command_num; i ++)
            {
                int op, X, Y;
                op = cin.nextInt();
                if(op == 4)
                {
                    is_inv = !is_inv;
                    continue;
                }
                X = cin.nextInt();
                Y = cin.nextInt();
                if(is_inv && op != 3)
                    op = 3 - op;
                if(op == 1)
                {
                    if(myLeft[Y] == X)
                        continue;
                    link(myLeft[X], myRight[X]);
                    link(myLeft[Y], X);
                    link(X, Y);
                }
                else if(op == 2)
                {
                    if(myRight[Y] == X)
                        continue;
                    link(myLeft[X], myRight[X]);
                    link(X, myRight[Y]);
                    link(Y, X);
                }
                else if(op == 3)
                {
                    if(myLeft[Y] == X)
                    {
                        link(myLeft[X], myRight[X]);
                        link(X, myRight[Y]);
                        link(Y, X);
                    }
                    else if(myLeft[X] == Y)
                    {
                        link(myLeft[Y], myRight[Y]);
                        link(Y, myRight[X]);
                        link(X, Y);
                    }
                    else
                    {
                        link(myLeft[X], myRight[X]);
                        link(myLeft[Y], myRight[Y]);
                        int YL = myLeft[Y];
                        int YR = myRight[Y];
                        link(myLeft[X], Y);
                        link(Y, myRight[X]);
                        link(YL, X);
                        link(X, YR);
                    }
                }
            }
            int b = 0;
            long result = 0;
            for(int i = 1; i <= box_num; i ++)
            {
                b = myRight[b];
                if(i % 2 == 1)
                    result += b;
            }
            if(is_inv && box_num % 2 == 0)
                result = (long)box_num*(box_num+1)/2 - result;
            System.out.printf("Case %d: %d\n", test_case, result);
            test_case ++;
        }
    }
}

0 ответов

Другие вопросы по тегам