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 <cstdio> #include <iostream> #include <vector> using namespace std; typedef struct { int who; int price; bool type; //true---sell false---buy } VVV; int have[26],total[26],id[1001]; char name[1001][11]; vector<VVV> v[26]; int maxi[26],mini[26],pay[1001],rec[1001],num; char s[21]; int cmp(const void *a,const void *b) { return strcmp(name[*(int *) a],name[*(int *) b]); } int findname(char *s) { int i; for (i=0;i<num;++i) if (!strcmp(name[i],s)) return i; strcpy(name[num],s); pay[num]=rec[num]=0; id[num]=num; return num++; } void dowith(VVV t,int thing) { vector<VVV>::iterator tt,should; int high,low,p; if (t.type) { //sell high=-1; for (tt=v[thing].begin();tt!=v[thing].end();++tt) if ((!tt->type) && (tt->price>=t.price) && (tt->price>high) && (tt->who!=t.who)) { high=tt->price; should=tt; } if (high>=0){ p=(t.price+high)>>1; if (have[thing]) { if (p>maxi[thing]) maxi[thing]=p; if (p<mini[thing]) mini[thing]=p; } else maxi[thing]=mini[thing]=p; ++have[thing]; total[thing]+=p; pay[should->who]+=p; rec[t.who]+=p; } else v[thing].push_back(t); } else { // buy low=10000; for (tt=v[thing].begin();tt!=v[thing].end();++tt) if ((tt->type) && (tt->price<=t.price) && (tt->price<low) && (tt->who!=t.who)) { low=tt->price; should=tt; } if (low<10000) { p=(t.price+low)>>1; if (have[thing]) { if (p>maxi[thing]) maxi[thing]=p; if (p<mini[thing]) mini[thing]=p; } else maxi[thing]=mini[thing]=p; ++have[thing]; total[thing]+=p; rec[should->who]+=p; pay[t.who]+=p; } else v[thing].push_back(t); } } int main() { int i,n,thing; VVV temp; while (true) { scanf("%d",&n); if (!n) break; for (i=0;i<26;++i) { v[i].clear(); have[i]=total[i]=0; } num=0; for (i=0;i<n;++i) { scanf("%s",s); temp.who=findname(s); scanf("%s",s); temp.type=(s[0]=='S'); scanf("%s",s); thing=s[0]-65; scanf("%d",&temp.price); dowith(temp,thing); } for (i=0;i<26;++i) if (have[i]) printf("%c %d %d %d\n",(char) (i+65),mini[i],total[i]/have[i],maxi[i]); printf("--\n"); qsort(id,num,sizeof(int),cmp); for (i=0;i<num;++i) printf("%s %d %d\n",name[id[i]],pay[id[i]],rec[id[i]]); printf("----------\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator