Page 1 of 1
Compilation errors!
Posted: Sat Jul 23, 2005 12:58 pm
by someone2
Hi,
Since email submissions are now no longer accepted. I was wondering what we should do to know the exact compilation errors! I have a program here. It compiles fine on djgpp on my machine (and on visual C++ 6.0). but it is giving me a compilation error all the time
Does the judge give a compilation error to the use of deprecated header (like strstream)?
The program is only indicated as "compile error". I don't know where the error is. Is there a way to know?
Thanks a lot in advance..

Re: Compilation errors!
Posted: Sat Jul 23, 2005 5:48 pm
by misof
someone2 wrote:Hi,
Since email submissions are now no longer accepted. I was wondering what we should do to know the exact compilation errors! I have a program here. It compiles fine on djgpp on my machine (and on visual C++ 6.0). but it is giving me a compilation error all the time
Does the judge give a compilation error to the use of deprecated header (like strstream)?
The program is only indicated as "compile error". I don't know where the error is. Is there a way to know?
Thanks a lot in advance..

Basically, if you don't get e-mails from the judge, you won't get the compiler output.
Try changing the strstream to "#include <sstream>".
Don't forget an explicit "using namespace std;"
If this doesn't help, post your code here.
Posted: Sat Jul 23, 2005 10:59 pm
by someone2
Hi,
Thanks a lot for the reply. I tried changing to #include <sstream> and using istringstream instead, but still I get a compilation error. I would appreciate it very much if you could tell me why it doesn't compile..
Here is the code..
Code: Select all
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <functional>
#include <string>
#include <istream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <iterator>
#include <ios>
#include <iosfwd>
#include <ios>
using namespace std;
//#define ONLINE_JUDGE
#ifdef ONLINE_JUDGE
#define Fin stdin
#define Fout stdout
#else
#define Fin f1
#define Fout f2
#endif
FILE* f1;
FILE* f2;
struct dataset
{
int id;
long double price;
vector<int> amounts;
dataset()
{
amounts.push_back(0);
amounts.push_back(0);
amounts.push_back(0);
amounts.push_back(0);
}
};
struct request
{
vector<int> amounts;
request()
{
amounts.push_back(0);
amounts.push_back(0);
amounts.push_back(0);
amounts.push_back(0);
}
};
vector<dataset> Datasets;
vector<request> Requests;
vector<int> filledAmounts; //a vector of 4 for the amounts
long double curPrice; //curPrice paid
long double minPrice;
struct res
{
int amount;
int package;
};
vector<res> amountOfPackages; //amounts taken from each package!
vector<res> minAmountOfPackages; //amounts taken from each package!
void doSolve(unsigned int datasetToStart,int curRequest)
{
//if finished solving, output it
char Done=1;
int j;
for(j=0;j<4;j++)
if(filledAmounts[j]<Requests[curRequest].amounts[j])
Done=0;
if(Done||datasetToStart==Datasets.size())
{
if(!Done)return;
if(minPrice<0)
{
minPrice=curPrice;
minAmountOfPackages=amountOfPackages;
}
else if(curPrice<minPrice)
{
minPrice=curPrice;
minAmountOfPackages=amountOfPackages;
}
return;
}
if(minPrice>0&&curPrice>minPrice)
return;
int num=0; //amount to take from package "packageToStart"
while(1)
{
//take num out of package "packageToStart"
vector<int> oldFill=filledAmounts;
vector<res> oldAmounts=amountOfPackages;
long double oldCurPrice=curPrice;
amountOfPackages[datasetToStart].amount=num;
amountOfPackages[datasetToStart].package=datasetToStart;
int i;
for(i=0;i<4;i++)
filledAmounts[i]+=Datasets[datasetToStart].amounts[i]*num;
curPrice+=Datasets[datasetToStart].price*num;
doSolve(datasetToStart+1,curRequest);
int done=1;
int j;
for( j=0;j<4;j++)
if(filledAmounts[j]<Requests[curRequest].amounts[j]&&Datasets[datasetToStart].amounts[j]>0)
done=0;
filledAmounts=oldFill;
amountOfPackages=oldAmounts;
curPrice=oldCurPrice;
if(done)
break;
num++;
}
}
struct IDSort:public binary_function<res,res,bool>
{
bool operator()(res x,res y)
{
if(Datasets[x.package].id<Datasets[y.package].id)
return 1;
return 0;
}
};
void solve(void)
{
while(1)
{
Datasets.clear();
Requests.clear();
int numDataSets,numRequests;
if(fscanf(Fin,"%d\n",&numDataSets)!=1)
break;
int i;
for(i=0;i<numDataSets;i++)
{
char line[5000];
fgets(line,4000,Fin);
istringstream inpS(line);
dataset temp;
//sscanf(line,"%d %Lf",&temp.id,&temp.price);
inpS>>temp.id>>temp.price;
while(inpS)
{
char c;int t;
inpS>>skipws>>c>>t;
if(inpS)
temp.amounts[c-'a']=t;
}
Datasets.push_back(temp);
}
fscanf(Fin,"%d\n",&numRequests);
for(i=0;i<numRequests;i++)
{
char line[5000];
fgets(line,4000,Fin);
istringstream inpS(line);
request temp;
//sscanf(line,"%d %Lf",&temp.id,&temp.price);
while(inpS)
{
char c;int t;
inpS>>skipws>>c>>t;
if(inpS)
temp.amounts[c-'a']+=t;
}
Requests.push_back(temp);
}
//start solving!
for(i=0;i<numRequests;i++)
{
curPrice=0;
minPrice=-100;
filledAmounts.clear();
filledAmounts.push_back(0);
filledAmounts.push_back(0);
filledAmounts.push_back(0);
filledAmounts.push_back(0);
amountOfPackages.clear();
res vv;
vv.amount=0;
vv.package=0;
int j;
for(j=0;j<numDataSets;j++)
amountOfPackages.push_back(vv);
doSolve(0,i);
fprintf(Fout,"%d: %7.2Lf",i+1,minPrice);
sort(minAmountOfPackages.begin(),minAmountOfPackages.end(),IDSort());
unsigned int k;
for(k=0;k<minAmountOfPackages.size();k++)
{
if(/*k!=minAmountOfPackages.size()-1&&*/minAmountOfPackages[k].amount>0)
fprintf(Fout," ");
if(minAmountOfPackages[k].amount==1)
fprintf(Fout,"%d",Datasets[minAmountOfPackages[k].package].id);
else if(minAmountOfPackages[k].amount>1)
fprintf(Fout,"%d(%d)",Datasets[minAmountOfPackages[k].package].id,minAmountOfPackages[k].amount);
}
fprintf(Fout,"\n");
}
fprintf(Fout,"\n");
}
}
int main(void)
{
#ifndef ONLINE_JUDGE
f1=fopen("cur.in","r");
f2=fopen("cur.out","w");
#endif
solve();
#ifndef ONLINE_JUDGE
fclose(Fin);
fclose(Fout);
#endif
return 0;
}
I would appreciate it very much if you could tell me where the problem is.
Thank you very much in advance for your efforts, sincerely appreciated.
Posted: Mon Jul 25, 2005 8:01 am
by misof
someone2 wrote:Hi,
Thanks a lot for the reply. I tried changing to #include <sstream> and using istringstream instead, but still I get a compilation error. I would appreciate it very much if you could tell me why it doesn't compile..
The judge uses an extremely old version of g++, I think it is g++-2.95.xx. To compile your code using this compiler I had to make two changes:
- comment out some includes it didn't know
Code: Select all
// #include <istream>
// #include <ios>
// #include <ios>
- change the >> skipws
Code: Select all
// inpS>>skipws>>c>>t;
inpS.setf(ios::skipws); inpS>>c; inpS.unsetf(ios::skipws); inpS>>t;
good luck!
Posted: Mon Jul 25, 2005 6:32 pm
by someone2
Thank you very much. This got the code compiled, but now, it got Time Limit Exceeded!!
Funny how I was thinking in the totally opposite direction. I thought the judge compiler was so new, it wouldn't even accept deprecated functions!!
Thanks again for the help. Sincerely appreciated.