infoarena

infoarena - concursuri, probleme, evaluator, articole => .CAMPION => Subiect creat de: Cobuz Andrei din Iulie 18, 2013, 14:14:31



Titlul: Dezbateri - Problema evaluator
Scris de: Cobuz Andrei din Iulie 18, 2013, 14:14:31
La aceasta problema http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=82 (http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=82) pe testele 8-12 primesc WA.
Am descaracat fisierul "in" si "ok" pentru testul 8, de pe site si am rulat pe datele de intrare din "in". Am comparat raspunsul dat de sursa mea cu cel din "ok"(d.p.d.v lexicografic) si am constatat ca sunt la fel.

Folosesc Code::Blocks 12.11 si compilerul GNU GCC.
Mentionez ca am rulat de mai multe ori, folosind standardele c++98,c++0x si c++11.
Am mai rulat si in Microsoft Visual Studio 2010.
Toate au avut acelasi rezultat.

Imi poate da cineva indicatii in legatura cu ce as putea face gresit sau cum se comporta evaluatorul de pe .campion?

Sursa mea:

Cod:
#include <fstream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#include <cctype>
#include <cassert>

using namespace std;

ifstream f("dezbateri.in");
ofstream g("dezbateri.out");

int main()
{
    vector<int> v[1001];
    int gr[1001]={};

    int n,m;

    f>>n>>m;
    f.ignore();

    for(int i=1;i<=m;i++){
        string a;
        getline(f,a);

        int x[3]={};
        unsigned j=0;

        for(int l=0;l<3;l++){
            while(j<a.size()&&isdigit(a[j])){
                x[l]=x[l]*10+a[j]-'0';
                j++;
            }
            j++;
        }

        j=0;
        while(isdigit(a[j]))
            j++;

        if(a[j]==','){
            v[x[0]].push_back(x[2]);
            v[x[1]].push_back(x[2]);
            gr[x[2]]+=2;
        }
        else{
            v[x[0]].push_back(x[1]);
            v[x[0]].push_back(x[2]);
            gr[x[1]]++;
            gr[x[2]]++;
        }
    }

    vector<int> sl[1001];
    queue<int> q;

    for(int i=1;i<=n;i++)
        if(!gr[i]){
            sl[0].push_back(i);
            q.push(i);
        }

    int nr=0;
    queue<int> ax,ax1;

    while(!q.empty()){
        nr++;
        while(!q.empty()){
            int i=q.front();
            q.pop();

            for(unsigned j=0;j<v[i].size();j++){
                gr[v[i][j]]--;
                if(!gr[v[i][j]]){
                    sl[nr].push_back(v[i][j]);
                    ax.push(v[i][j]);
                }
                if(gr[v[i][j]]==-1){
                    g<<0;
                    return 0;
                }
            }

        }
        q=ax;
        ax=ax1;
    }

    for(int i=1;i<=n;i++)
        if(gr[i]){
            g<<0;
            return 0;
        }

    for(int i=1000;i>=0;i--)
        if(sl[i].size()){
            sort(sl[i].begin(),sl[i].end());
            for(unsigned j=0;j<sl[i].size();j++){
                g<<sl[i][j];
                if(j!=sl[i].size()-1||i!=0)
                    g<<" ";
            }
        }
    g<<'\n';

    return 0;
}


Titlul: Răspuns: Dezbateri - Problema evaluator
Scris de: Andrei din Februarie 08, 2014, 11:44:48
Salut,
si mie mi s-a intamplt sa nu primesc punctajul total pe campion.edu chiar daca pentru testele descarcate programul afisa rspunsul corect.Si chiar de vreo doua ori.
A mai auzit si de altii in situatia asta. Cred ca problema e la evaluator, nu la noi.