La aceasta problema
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:
#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;
}