USACO:Section 1.1 Greedy Gift Givers

气死我了,提交半天么成功,原来他们的“_”是指空格,气死俺了。

/* ID:lwj13961 TASK:gift1 LANG: C++ */ #include<iostream> #include<fstream> #include<vector> #include<cstring> #include<cassert> using namespace std; class person { public: string name; int out; int in; }; int NP=0; //the quantities of groups vector<person> ps; int gift() { char *ifs_file_name = "gift1.in"; /* input file name */ ifstream ifs; /* create ifstream object */ ifs.open (ifs_file_name); /* open ifstream */ if (!ifs) { cerr << "\nERROR : failed to open input file " << ifs_file_name << endl; exit (EXIT_FAILURE); } ifs>>NP; assert(NP>=2||NP<=10); //N2<=P<=10 string name; person p; for(int i=0;i<NP;i++) { ifs>>name; assert(name.size()<=14); // name <14 charactors p.name = name; p.out=0; p.in=0; ps.push_back(p); } int totalmoney; int personnum; vector<person>::iterator ip; while(!ifs.eof()) { ifs>>name; if(name=="") return 1; ifs>>totalmoney>>personnum; assert(totalmoney>=0||totalmoney<=2000); int getmoney; if(personnum!=0) getmoney=totalmoney/personnum; else getmoney=0; //find the gving person ,update his out if(!ifs.eof()) for(ip=ps.begin();ip!=ps.end();ip++) { if(strcmp((*ip).name.c_str(),name.c_str())==0) { (*ip).out += getmoney*personnum; //cout<<(*ip).name<<" out money:"<<(*ip).out<<endl; break; } } //find the get person,update his in for(int i=0;i<personnum;i++) { string getname; ifs>>getname; for(ip=ps.begin();ip!=ps.end();ip++) { if(strcmp((*ip).name.c_str(),getname.c_str())==0) { (*ip).in += getmoney; // cout<<name<<" give "<<(*ip).name<<" money:"<<getmoney<<" "; // cout<<(*ip).name<<" in money:"<<(*ip).in<<endl; break; } } } } ifs.close (); /* close ifstream */ //output result char *ofs_file_name = "gift1.out"; /* output file name */ ofstream ofs; /* create ofstream object */ ofs.open (ofs_file_name); /* open ofstream */ if (!ofs) { cerr << "\nERROR : failed to open output file " << ofs_file_name << endl; exit (EXIT_FAILURE); } vector<person>::iterator it; for(it=ps.begin();it!=ps.end();it++) { ofs<<(*it).name<<" "<<(*it).in-(*it).out; ofs<<endl; } ofs.close (); /* close ofstream */ } int main() { gift(); return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值