| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
谁帮我测试一下,搞不懂哪里有问题#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
int n1,n2,n3;
string a,f;
map<string,int> M;
map<string,vector<int> >m2;
map<string,int>::iterator it;
struct element{
map<string,int> m1;
}x[10005];
struct Rank{
string name;
int mix,flag,pos;
int cost;
}y[10005];
void assign(int num,int p){
string name;
int sum;
while(num--){
cin>>name>>sum;
x[p].m1[name]=sum;
}
}
void init_1(){
string name;
int num;
for(int i=1;i<=n1;i++){
cin>>name>>num;
M[name]=i;
assign(num,i);
y[i].name=name;
y[i].mix=0;
y[i].pos=i;
y[i].cost=0;
}
}
void init_2(){
string name;
int num,price;
for(int i=1;i<=n2;i++){
cin>>name>>num>>price;
m2[name].push_back(num);
m2[name].push_back(price);
}
}
void Cost(){
int flag;
for(int i=1;i<=n1;i++){
flag=0;
for(it=x[i].m1.begin();it!=x[i].m1.end();it++){
if(m2.find(it->first)==m2.end()){
flag=1;
break;
}
y[i].cost+=(it->second*m2[it->first][1]);
}
if(!flag)
y[i].cost=y[i].cost*3+10000;
else y[i].cost=0;
}
}
bool cal(){
for(it=x[M[a]].m1.begin();it!=x[M[a]].m1.end();it++){
string name=it->first;
int num=it->second;
if(m2.find(name)==m2.end()||m2[name][0]<num) return false;
}
for(it=x[M[a]].m1.begin();it!=x[M[a]].m1.end();it++){
string name=it->first;
int num=it->second;
if(num>m2[name][0]) return false;
m2[name][0]-=num;
}
y[M[a]].mix++;
return true;
}
bool judge(){
if(a==f){
if(M[a]==n1){
a=y[1].name;
}
else{
a=y[M[a]+1].name;
}
}
if(cal()) return true;
for(int j=1;j<=n1;j++){
a=y[j].name;
if(a!=f){
if(cal()) return true;
}
}
return false;
}
bool cmp(Rank t1,Rank t2){
if(t1.mix==t2.mix) return t1.pos<t2.pos;
return t1.mix>t2.mix;
}
void Print(){
for(int i=1,j=1;i<=n1;i++){
if(y[i].mix&&j!=11){
cout<<j<<" "<<y[i].name<<" "<<y[i].mix<<" "<<y[i].cost<<endl;
j++;
}
x[i].m1.clear();
}
}
int main(){
int Case;
cin>>Case;
for(int i=1;i<=Case;i++){
cin>>n1;
init_1();
cin>>n2;
init_2();
Cost();
cin>>n3;
f="";
for(int i=1;i<=n3;i++){
cin>>a;
if(M.find(a)==M.end()) continue;
if(judge()) f=a;
}
sort(y+1,y+1+n1,cmp);
cout<<"Scenario "<<i<<" top cocktails:"<<endl;
Print();
M.clear();
m2.clear();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator