#include #include #include struct agent { char name[20]; bool type; //true = buy; false=sell float price; }; int compare_agent(const void* a,const void* b) { agent* arg1=(agent*) a; agent* arg2=(agent*) b; if(arg1->priceprice) return -1; else if(arg1->price>arg2->price) return 1; else { if(arg1->type) return 1; else return -1; } } bool valid_trade(float a,float b,bool type) //a type b { if(type) return a>=b; else return a<=b; } void do_job(int _size,char* _issuer) { agent *agents=new agent[_size]; int i,j; int count=0; char oper[4]; for(i=0;i<_size;i++) { scanf("%s %s %f",agents[i].name,oper,&(agents[i].price)); if(strcmp("buy",oper)==0) agents[i].type=true; else agents[i].type=false; } //mam nacitane //musim usporiadat pole //qsort(agents,_size,sizeof(agent),compare_agent); //vypisem /* for(i=0;i<_size;i++) { count=0; printf("%s:",agents[i].name); if(agents[i].type==true) { for(j=i;j>0;j--) { if(agents[j].type==false) { printf(" %s",agents[j].name); count++; } } } else { for(j=i;j<_size;j++) { if(agents[j].type==true) { printf(" %s",agents[j].name); count++; } } } if(count==0) printf(" NO-ONE"); printf("\n"); //koniec agenta } */ for(i=0;i<_size;i++) { count=0; printf("%s:",agents[i].name); for(j=0;j<_size;j++) { if(i!=j && agents[i].type!=agents[j].type && valid_trade(agents[i].price,agents[j].price,agents[i].type)) { printf(" %s",agents[j].name); count++; } } if(count==0) printf(" NO-ONE"); printf("\n"); } return; } int main() { int m_size; char m_issuer[10]; scanf("%d",&m_size); scanf("%s",m_issuer); while(m_size!=0 || strcmp("END",m_issuer)!=0) { printf("%s\n",m_issuer); do_job(m_size,m_issuer); scanf("%d",&m_size); scanf("%s",m_issuer); } return 0; }