Проблема со списком C # при компиляции в моно (связанная с домашним заданием)

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

Теперь это не проблема алгоритма. Это скорее техническая проблема. На своем компьютере я использую компилятор .NET (csc), а в оценочной машине профессора используется некоторая форма моно.

Он работает хорошо, пока оценщик не сказал, что я получил 30/100. Один мой друг посоветовал мне использовать "систему ручного ввода" классификатора, так что я начал, я создал массив из 100000 списков для списка смежности.

Оценщик через несколько секунд сообщил, что мой программа потерпела крах.

Stacktrace:

at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke_object__this__ (object,intptr,intptr,intptr) <0xffffffff>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0x00004>
at (wrapper managed-to-native) object.__icall_wrapper_mono_object_new_fast (intptr) <0xffffffff>
at System.Exception.ToString () <0x00026>
at (wrapper runtime-invoke) object.runtime_invoke

Это немного странно и тревожно для меня, но я еще не нашел ответа на этот вопрос. Опять же, эта программа отлично работала на моем ПК.

Это моя часть программы:

using System;
using System.Collections;
using System.Collections.Generic;

class topo{
public static void Main(){
    string[] ST = Console.ReadLine().Split(' ');
    int N=Convert.ToInt32(ST[0]), M=Convert.ToInt32(ST[1]);
    int[] ins = new int[N];  //node's total in-degrees
    List<int>[] E = new List<int>[N];

    for(int n=0;n<N;n++)    
        E[n] = new List<int>();

    for(int m=0;m<M;m++){
        ST = Console.ReadLine().Split(' ');
        int u = Convert.ToInt32(ST[0]);
        int v = Convert.ToInt32(ST[1]);
        E[u-1].Add(v-1);
        ins[v-1]++;
    }

    Queue S = new Queue();
    List<int> L = new List<int>(); //result list

    for(int n=0;n<N;n++){
        //add stranded nodes directly and don't process it
        if(ins[n]==0 && E[n].Count==0)
            L.Add(n);

        //put into queue
        else if(ins[n]==0)
            S.Enqueue(n);
    }

    while(S.Count>0){
        int n = (int) S.Dequeue();
        L.Add(n);
        foreach(int m in E[n])
            if(--ins[m]==0)
                S.Enqueue(m);
    }

    foreach(int n in L)
        Console.WriteLine(n+1);

}

}

Большое спасибо, и я ценю любой ответ.

Редактировать: Я еще раз взглянул на результаты работы оценщика, чтобы увидеть, пропустил ли я что-нибудь, и действительно, я сделал. Там было написано "syscal: 2", но все, что я знаю об этом, это то, что "программа не завершилась нормально".

Правка №2: Я попытался сделать попытку программы сделать различные размеры массива из -list в диапазоне от 5000, 10000 и т. д., а после 40000 «система ручного ввода» сообщила, что программа получила исключение System.OutOfMemoryException. При дальнейшем изучении различных частей оценщика, в которые допускаются учащиеся, выясняется, что профессор неверно сконфигурировал свои параметры оценивания и оставил нам меньше памяти, чем было заявлено. (Он сказал «32MB», но программа вылетает примерно на 16MB)

I ' Я сообщил ему об ошибке, и он (прямо сейчас) изучает ее.

10
задан Bill the Lizard 16 September 2012 в 22:21
поделиться